Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2016 15:50:20

mabenqw
Зарегистрирован: 2016-05-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

К примеру есть программа parent.py, в которой есть цикл

while i < 5
i=i+1

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

Каким образом это можно реализовать? Pipe подойдет?

Офлайн

#2 Май 30, 2016 20:35:26

code_ua
Зарегистрирован: 2016-05-30
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

в пределах одной программы лучше подойдут генераторы

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

смотря какие данные в задаче, для цикла можно и в файл(или на вывод) записывать значения одной программой, а другой забирать

Офлайн

#3 Май 30, 2016 22:02:56

mabenqw
Зарегистрирован: 2016-05-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

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

Отредактировано mabenqw (Май 30, 2016 22:06:29)

Офлайн

#4 Май 30, 2016 22:07:04

code_ua
Зарегистрирован: 2016-05-30
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

pipe для такой задачи тоже подойдет

Офлайн

#5 Май 30, 2016 22:51:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

mabenqw
так как все должно происходить в реальном времени
Понятие растяжимое. Это может быть обновление расписания раз в сутки ;)

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

У вас наилучший вариант
for i in range(5):
   print(i)
Цель достигнута. Никаких вызовов не надо. Зачем тут вторая программа?



Отредактировано doza_and (Май 30, 2016 22:56:59)

Офлайн

#6 Май 30, 2016 23:13:44

mabenqw
Зарегистрирован: 2016-05-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

Если конкретнее, то по определенным причинам parent.py не может выводить данные (проценты загрузки, например) на экран. Но есть child.py, которая умеет выводить данные на экран. parent обновляет значение переменной очень быстро (раз в 10мс, например), но чтобы сильно не грузить систему, пусть она отправляет новое значение child раз в 2 секунды, например. Когда значение переменной достигает определенного значения, child выводит сообщение об этом и завершает свою работу.
Как то так. parent.py и child.py это просто абстракция, чтобы выразить то, что требуется сделать.

Офлайн

#7 Май 30, 2016 23:34:21

code_ua
Зарегистрирован: 2016-05-30
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

В таком случае можно вызывать 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:])

Офлайн

#8 Май 30, 2016 23:55:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

mabenqw
Если конкретнее, то по определенным причинам parent.py не может выводить данные
Так по каким причинам? От этого зависит решение. Делать передачу данных в между процедурами, между тредами между процессами или между компьютерами?



Офлайн

#9 Май 31, 2016 11:52:30

mabenqw
Зарегистрирован: 2016-05-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

Программа parent.py довольно крупная и написана не мной. Выводить значения нужно не только в консоль, но и на текстовый дисплей. Чтобы это сделать, parent.py нужно довольно сильно переделать. Внедрение в ее исходники должно быть минимальным, поэтому лучше это сделать с помощью child.py. К тому же child.py уже написана и отлажена. Всего лишь нужно передавать ей значение переменной.

Офлайн

#10 Май 31, 2016 21:41:14

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Передача значений перемнной другой программе

mabenqw
parent.py довольно крупная и написана не мной.
Вообще не проблема. Это почти всегда так.
mabenqw
Чтобы это сделать, parent.py нужно довольно сильно переделать.
Обоснуйте. Помоему все переделки Это добавить в parant.py

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

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version