Найти - Пользователи
Полная версия: Передача значений перемнной другой программе
Начало » Python для новичков » Передача значений перемнной другой программе
1 2
mabenqw
К примеру есть программа parent.py, в которой есть цикл
while i < 5
i=i+1

Нужно, чтобы вторая программа child.py получала значения i выводила их.

Каким образом это можно реализовать? Pipe подойдет?
code_ua
в пределах одной программы лучше подойдут генераторы

если программы запускаются отдельно и сложные задачи, то лучше использовать Celery

смотря какие данные в задаче, для цикла можно и в файл(или на вывод) записывать значения одной программой, а другой забирать
mabenqw
code_ua
в пределах одной программы лучше подойдут генераторыесли программы запускаются отдельно и сложные задачи, то лучше использовать Celeryсмотря какие данные в задаче, для цикла можно и в файл(или на вывод) записывать значения одной программой, а другой забирать
Файловый ввод-вывод не подходит, так как все должно происходить в реальном времени. Например, нужно отображать проценты какого-либо процесса.
Буду пробовать celery.
code_ua
pipe для такой задачи тоже подойдет
doza_and
mabenqw
так как все должно происходить в реальном времени
Понятие растяжимое. Это может быть обновление расписания раз в сутки ;)

Ваша постановка задачи выглядит очень размыто. Пишите конкретнее что хотите делать.

У вас наилучший вариант
for i in range(5):
   print(i)
Цель достигнута. Никаких вызовов не надо. Зачем тут вторая программа?
mabenqw
Если конкретнее, то по определенным причинам parent.py не может выводить данные (проценты загрузки, например) на экран. Но есть child.py, которая умеет выводить данные на экран. parent обновляет значение переменной очень быстро (раз в 10мс, например), но чтобы сильно не грузить систему, пусть она отправляет новое значение child раз в 2 секунды, например. Когда значение переменной достигает определенного значения, child выводит сообщение об этом и завершает свою работу.
Как то так. parent.py и child.py это просто абстракция, чтобы выразить то, что требуется сделать.
code_ua
В таком случае можно вызывать child.py каждый раз, когда parent.py возвращает значение, можно и без задержек

python parent.py | xargs -n 1 python child.py

#parent.py
for i in range(5):
    print(i)

#child.py
import sys
print(sys.argv[1:])
doza_and
mabenqw
Если конкретнее, то по определенным причинам parent.py не может выводить данные
Так по каким причинам? От этого зависит решение. Делать передачу данных в между процедурами, между тредами между процессами или между компьютерами?
mabenqw
Программа parent.py довольно крупная и написана не мной. Выводить значения нужно не только в консоль, но и на текстовый дисплей. Чтобы это сделать, parent.py нужно довольно сильно переделать. Внедрение в ее исходники должно быть минимальным, поэтому лучше это сделать с помощью child.py. К тому же child.py уже написана и отлажена. Всего лишь нужно передавать ей значение переменной.
doza_and
mabenqw
parent.py довольно крупная и написана не мной.
Вообще не проблема. Это почти всегда так.
mabenqw
Чтобы это сделать, parent.py нужно довольно сильно переделать.
Обоснуйте. Помоему все переделки Это добавить в parant.py

from child import update_message
....
if update_now:
   update_message("куку")
....
update_message вызывать по вашим условиям в том месте где вы собирались посылать сообщения.

Вы это называете сильно переделать? Чем это сложнее посылки сообщения?
Что такое текстовый дисплей я не знаю, поэтому это усложнение мне совершенно непонятно.
mabenqw
К тому же child.py уже написана и отлажена
Это вы скажете когда все вместе заработает. А пока можно считать что ничего нет. Вам надо организовать совместный запуск, совместный останов, передачу данных между процессами, предусмотреть механизмы синхронизации сообщений. Задача совсем не для новичка. Pipe в большинстве случаев не подходит, поскольку обычно очень нетривиально буферизирован.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB