Я уверен, что это можно сделать с помощью функции os.plock(op), но я понятия не имею, как это сделать. Кроме того, если есть лучший способ, я был бы признателен за это. Фрагменты кода очень приветствуются.
Как вы делитесь данными между родительским и раздвоенным дочерним процессом в Python?
Ответ 1
Subprocess заменяет os.popen, os.system, os.spawn, popen2 и команды. A простой пример для трубопровода:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Вы также можете использовать файл с отображением памяти с флагом = MAP_SHARED для общей памяти между процессами.
multiprocessing абстрагирует как pipe, так и разделяемая память и обеспечивает интерфейс более высокого уровня. Из документации по обработке:
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()
Ответ 2
Взгляните на модуль multiprocessing, новый в python 2.6 (также доступен для более ранних версий pyprocessing
Вот пример из документов, иллюстрирующих передачу информации, используя, например, канал:
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()
Ответ 3
Это почти не зависит от Python! Это классический пример межпроцессного взаимодействия Unix. Одним из хороших вариантов является использование popen()
, чтобы открыть канал между родительским и дочерним процессами и передать данные/сообщения взад и вперед по каналу.
Взгляните на subprocess
module, который автоматически настраивает необходимые каналы при нерестах дочерних процессов.
Ответ 4
У вас есть два варианта: os.popen*
в модуле os
, или вы можете использовать модуль subprocess
для того же эффекта. В руководстве Python есть довольно документация и примеры для popen и subprocess.