LINUX.ORG.RU

356
Всего сообщений: 3221

Разделяемая память для процессов на Python и не только.

Привет всем!

Есть большое многопроцессное приложение, с рабочими процессами, всякими GUI и логгерами в отдельных процессах и т.д. Построено с использованием модуля multiprocessing. Рабочие процессы обрабатывают большие данные. Для больших данных используется multiprocessing.Array, вот так:

class Worker(mp.Process):
    def __init__(self, buffers, pipe, other):
        super().__init__()
        self._buffers = buffers
        self._pipe = pipe
    def run(self):
        param = get_message(self._pipe)
        big_calculations(self._buffers[param.a], param.b, ...)

buffers = []
for i in range(10):
    buffers.append(mp.Array(ctypes.c_uint8, buffer_size, lock=False))
...
for i in range(10):
    p1, p2 = mp.Pipe()
    worker = Worker(buffers, p1, other_param)
    worker.start()
Синхронизация от mp.Array не требуется, процессы синхронизируются с помощью посылки/отправки сообщений через p1/p2, поэтому lock=False.

Вопросы:
* Размер/количество буфера(ов) задаются до запуска рабочих процессов. Как правильно реализовать изменение количества/размера после того, как рабочие процессы уже стартовали? Т.е. понятно, как отправить сообщение. Непонятно как закрыть существующий буфер и открыть новый.
* Что у mp.Array под капотом? Я заметил, что python открывает много файлов с именами вида /tmp/pymp-ixc54qx7/pym-27111-h7wi_sy3. Это как-то связано с mp.Array?
* Очень желательно, чтобы к этой общей памяти можно было обращаться не только из процессов на Python. Возможно как-либо её открыть из другого стороннего процесса, написанного на чём-то ещё? Может быть мне тогда что-то другое использовать, а не mp.Array?

Аналогичные вопросы про mp.Pipe():
* Как в работающий процесс передать конец новой трубы?
* Как передать в не Python'овский процесс конец трубы?

Спасибо!

 , , , ,

ls-h ()

не могу убрать \n из вывода селекта.

Привет.
я тут из питона лезу в mssql и пытаюсь вытащить записать в вывод в файл.
Проблема в том, что в одной из column-ов приходит «\n».

Собственно вопрос, как от него избавиться ?
Сейчас пытаюсь сделать так:

 + str(row[27]).rstrip("\n\r") +
но это не работает.
Смотрел эту строку hexdump-ом. Там действительно «0a».
А питон умеет убирать по hex коду?
Пните неуча.

Спасибо.

ps: в гугле не забанили, но суммарно потрачено уже более 7-ми часов на эту проблему.

 ,

dada ()

Установка OpenCV 4.1.1 - проблема в пути?

Привет! Имеется OS X, проблем с сборкой нет, но ставит не в папку самого Python.

Вот не пойму, как направить CMAKE на сборку файлов в python/site-packages/...

Просто поменять адрес в этом конфиге?

-D CMAKE_INSTALL_PREFIX=/usr/local \

Сам код сборки:

( читать дальше... )

 

zudva ()

Челябинск, ЛАНИТ-Урал, требуется

Здравствуйте, коллеги!

Компания ЛАНИТ-Урал. Наш отдел занимается миграцией заказчиков на отечественное ПО средствами собственного решения.

Ключевые технологии: Python, Django, Salt Stack, Git, CentOS, Debian.

В первую очередь требуется системный администратор для «полевой» работы, готовый к командировкам. Но если вы любите GNU/Linux, свободное ПО или хотите погрузиться в удивительный мир импортозамещения, приходите пообщаться — возможно вы созданы для нашей команды! Есть задачи по программированию, системному администрированию, тестированию.

Белая зарплата от 30 тыс. руб.

Мы находимся в г. Челябинск, в ИТ-парке на пересечении Молодогвардейцев и проспекта Победы.

lanit@privacyrequired.com

 , , ,

burgertroll ()

python, словарь из аргументов

Хочется странного. Что-то вроде функции, которая бы собирала словарь, используя в качестве ключей имена аргументов переданных в неё. Возможно ли такое?

Что-то вроде foo(a, b, c) -> {«a»:a, «b»:b, «c»:c}

 

thunar ()

Python 3 Потоки/Очереди задач.

Добрый день. Возникла сейчас необходимость писать API, при запросе к которому необходимо выполнять некоторые тяжелые вычисления. На выполнение одного уходит где-то 20-40 секунд. После результат отправляется по другим каналам (или в БД). Что лучше для такого использовать? Понятно, что асинхронщина не вариант из-за CPU work. Потоки? Просто тут GIL. Как вариант, субпроцессы. По сути, работа - запуск стороннего bash скрипта и получение результатов от него, так что субпроцессы должны сработать хорошо. Может для такого какие очереди задач будут лучше? Подумываю насчет Celery.

 , ,

crarkie ()

Perl 6 vs Python 3

Дискач.

Чтобы писать утилиты и демоны например для десктопа. Допустим оставим в покое веб-девелопмент, там и так тесно. И забудем былое, Python 2, Perl 5 и связанные стереотипы.

P.S. Прошу не удалять за тупняк, я понимаю как это выглядит. Но тема то интересная

 , , ,

vertexua ()

LaTeX <-> python

А есть-ли для python пакеты, позволяющие автоматически преобразовывать LaTeXную диакритику в utf8 и обратно? Например

{Tom\'{a}\v{s}} <-> Tomáš

 , ,

thunar ()

Сколько типов комментариев существует в python?

Разве не один всего однострочный(решетка)? Понимаю, что комментарий можно сделать с помощью одинарных кавычек ('это комментарий одной строки'), двойных(«это тоже комментарий одной строки»), тройных одинарных ("' однострочный или многострочный "'), тройных двойных («»" однострочный или многострочный """), но ведь эти 4 варианта - это все строковые литералы (позволяющие сделать комментарий ).

 

KRex ()

matplotlib обрезается бокс с label + еще вопросы

1. На выходе бокс с label обрезается. В боксе мне нужно много значений. Как бы его так сделать, чтобы он корректно в foo.png входил? 2. Есть возможность не в ручную создавать errorbar? т.е чтобы я не делал

for x in some: 
    eval(plt.errorbar(%(some1)s, %(some2)s, label='%(label)s' % ({'some1': some, 'some2': some2, 'label'=label}))
3. Какой корректно использовать bar? Думаю, что errorbar некорретно юзать
import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
x = np.arange(10)
x = np.array(x)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
print(x)
plt.errorbar(x, y + 1, label='some1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqqqqqqqqqqqqqqqqq')
plt.errorbar(x, y + 2, label='some2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb')
plt.errorbar(x, y + 3, label='some3cccccccccccccccccccccccccccccccccccccccccccccccc')
plt.errorbar(x, y + 4, label='some4ddddddddddddddddddddddddddddddddddddddddddddddddd')
plt.errorbar(x, y + 5, label='some5eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee')
plt.errorbar(x, y + 6, label='some6tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt')

plt.legend(loc="upper left", bbox_to_anchor=(1,1))

# plt.show()
plt.savefig('foo.png')
plt.close()

 ,

Xwo ()

Flask , AJAX Вернуть данные формы на туже страницу.

Хочу вывести результаты ввода формы на тот же темплейт , не перегружая страницу. Я долго мучался, прежде чем написать сюда. Частично оно даже работает, но есть вопросы и они внизу под кодом.

@app.route('/', methods= ["GET", "POST"])
def homepage():
    form = LoginForm()
    if request.method == 'POST':
        story = request.form.get('story')
        username = request.form.get('username')
        if story:
            result = story + username
            return jsonify(result=result)
        else:
            return jsonify(result='Input needed')

    return render_template('return.html', form=form)
class LoginForm(FlaskForm):

    username = StringField('username')

<body>
        <div class='container'>
            <form>


                    <div class="col-md-3">
                            <div class="form-group">
                                {{ form.username.label }}
                                {{ form.username(class_="form-control") }}
                            </div>
                    </div>


                <input class="form-control" id="story" name="story" type="text" value="">
                <br>
                <p>{{ form.submit(class_="btn btn-primary") }}</p>
                <a href=# id=submit><button class='btn btn-primary'>Submit</button></a>
            </form>
            <br>
            <p><h2 align='center'>Result:</h2><h2 id=result align='center'></h2></p>
        </div>

        <script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script type=text/javascript>
            $(function() {
              $('a#submit').bind('click', function() {
                $.post('/', {
                  story: $('input[name="story"]').val(),
                  username: $('input[name="username"]').val(),
                }, function(data) {
                  $('#result').text(data.result);
                });
                return false;
              });
            });
        </script>

Два вопроса.

1. При генерации html у меня соответственно две кнопки

<input class="btn btn-primary" id="submit" name="submit" type="submit" value="Submit"></p>

и

                <a href=# id=submit><button class='btn btn-primary'>Submit</button></a>

Вторая кнопка работает нормально и по ней ajax возвращает данные формы на ту же страницу. А первая нет. Первая выдает

«GET /?username=&story=&submit=Submit HTTP/1.1» 200 те GET запрос.

но если в роуте вместо if request.method == 'POST', я использую if form.validate_on_submit(): , то вторая тоже перестает работать. Хотелось бы использовать form.validate_on_submit(): и отдавать ввод формы обратно на тот же темплейт.

Второй вопрос. Мне обязательно надо перечислять все переменные в ajax скрипте? может я могу как-то забрать их все сразу вместе?

Этот тестовый код, который я вымучил за пару дней. Может быть можно сделать все красивее , я был бы очень рад как пояснениям, так и правильным примерам к задаче.

 , ,

constin ()

Отладка и просмотр объектов в памяти (python)

Подскажите, есть ли какая-нибудь питонская либа, которая позволяет просматривать объекты в памяти в удобном формате?

Я имею в виду например: начинаем с какого-нибудь объекта - отображается его содержимое. Потом подводишь мышку к какому-нибудь полю этого объекта, которое ссылается на другой объект, и рядом появляется окошко, в котором отображается содержимое этого другого объекта. Далее в новом окошке можно сделать то же самое. И так далее. А когда убираешь мышку с окна - оно пропадает.

Я помню такое было в MSVC2008. Это было очень удобно.

Если такое есть для jupyter-notebook-а - будет вообще божественно.

 ,

FeelUs ()

playonlinux переписывают c Python на Java

Проект PlayOnlinux не осилил портирование с Python2 на Python3 и его теперь переписывают с нуля, на Java11.

https://github.com/PhoenicisOrg/phoenicis

Соответственно в Fedora 32 его уже не будет.

Есть тут живые пользователи? Не хотите подобрать проект и исправить это безобразие? Переписать всё ещё раз на Go?

UPD:

Конечно, Java в Fedora есть, но переписанный на ней проект - это новый код, который надо пакетить заново, автоматически сам в Fedora он не появится.

Так что если есть желающие - можно заняться либо опакечиванием phoenicis, либо портированием playonlinux на python3.

 , ,

alpha ()

История Python

Читал тут статью о возникновении Python и его воспарении практически над всеми устальными ЯП; оказалось, что есть некоторые общие моменты с историей возникновения C++ и Linux, а именно:

1) проект не появился бы на свет, если бы существовало какое-то конкретное ПО, которое тогда было востребовано в работе над конкретным проектом, т.е. инструмент не являлся результатом какой-либо исследовательской работы (типа Haskell), а преследовал чисто утилитарные цели (в случае с Python была необходимость работы с ОС Amoeba (проект Таненбаума!), для которой нормальной реализации шелла не было, а писать административные скрипты на С было, очевидно, лень);

2) автор поделился результатами своей работы с общественностью на самых ранних этапах разработки (т.e. никакого желания срубить бабла у него не было);

3) автор не предполагал, что инструмент получит мощный импульс развития и станет мега-популярным в самых разных областях применения.

T.o. мы видим, что мейнстримные технологии в ПО иногда появляются не из недр корпорации со специальным research-отделом яйцеголовых, а по воле одиночек, в процессе практической работы с той или иной системой. Но ключевым моментом в возможности развития таких технологий является публикация их под открытой лицензией.

P.S. ну и напоследок, стоит отметить, что эта тройка (С++, Python и Linux) оказали гигантское влияние на развитие индустрии ПО. Думаю, что не будет преувеличением сказать, что разбираясь в достаточной мере в этой тройке технологий, специалист всегда сможет найти себе работу, как минимум еще лет 20.

 ,

seiken ()

Красивый форматированный вывод в консоль

Что есть в/для python, чтобы без лишних движений сделать человеческий вывод в консоль, с разными цветами, отступами, линиями и стрелочками, вот этим всем?

 ,

alexferman ()

Передача значений между процессами

Запущены два процесса на linux'е, первый неважно на чем написан, второй - на питоне. Как передавать нужные числовые или текстовые значения из первого процесса в другой?

Пока придумал для первого записывать значение в текстовый файл, который второй прочитает. Не нравится это решение тем, что для чтения/записи придется открывать и закрывать файл: это оверхед и насилование харда.

 

xDShot ()

Загрузка файлов с sftp сервера

Добрый день, написал скрипт загрузки данных с sftp, выдается ошибка IsADirectoryError: Is a directory:

  import paramiko
host = "HOST"
port = 22
username = "user"
password = "pqssword"
transport = paramiko.Transport((host, port))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
remotepath = '/home/exchange/reports'
localpath = '/home/exchange/reports'
sftp.get(remotepath, localpath)
sftp.close()
transport.close()

В папке reports на сервере лежат файлы, хочу что бы все файлы копировались на локальный хост

 ,

letema88 ()

Надавайте по рукам

Шалом.

В свободное от алкоголизма время стараюсь окончательно не деградировать и пытаюсь изучать Python. Дабы сразу не скатится в не ту степь, прошу местных питончан надавать мне по рукам за какие-либо косяки (от названия переменных в моём хелловорлде, заканчивая неправильным использованием методов и функций):

from tkinter import *
from tkinter.constants import *
from googletrans import Translator

RootWindow = Tk()
RootWindow.title('Переводчик')

TextToTranslate = Text(RootWindow, width=40, height=10)
TranslatedText = Text(RootWindow, width=40, height=10)

TranslationButton = Button(RootWindow, text='Перевести')
ExitButton = Button(RootWindow, text='Выход', command=RootWindow.destroy)

LangSrcList = ['ru','en']
LangDestList = LangSrcList.copy()

LangSrcVar = StringVar(RootWindow)
LangSrcVar.set(LangSrcList[0])

LangDestVar = StringVar(RootWindow)
LangDestVar.set(LangDestList[1])

LangSrcMenu = OptionMenu(RootWindow, LangSrcVar, *LangSrcList)
LangDestMenu = OptionMenu(RootWindow, LangDestVar, *LangDestList)

TranslatorObject = Translator()

def TranslatorFunc(text):
	TranslatedText.delete(1.0, END)
	TranslationText = TextToTranslate.get(1.0, END)
	TranslationText = TranslatorObject.translate(TranslationText, src=LangSrcVar.get(), dest=LangDestVar.get()).text
	TranslatedText.insert(1.0, TranslationText)

TranslationButton.bind('<Button-1>', TranslatorFunc)

TextToTranslate.pack()
TranslatedText.pack()

TranslationButton.pack(side=LEFT)
ExitButton.pack(side=RIGHT)

LangSrcMenu.pack(side=LEFT, expand=True)
LangDestMenu.pack(side=RIGHT, expand=True)

RootWindow.mainloop()
Заранее благодарю за истязания.

 , , , ,

IPR ()

Поставка Python в Windows и Unix-like отличается?

Некоторые модули (например readline/pyreadline) в windows отсутствуют при установке python. В Linux он есть. Почему так, что мешает ставить одинаковый набор пакетов во все ОС?

 

KRex ()

Ищу работу. Golang, python. [уже нашёл]

https://github.com/AnimusPEXUS/about/raw/master/Resume2.pdf

попрошу без полемики. давайте т.з. - там будет видно.

работа найдена

 , ,

PexuOne ()