К сожалению, дочерняя среда испарится, как только она выйдет, и даже если вы используете файловую систему / proc в Unix специальный файл /proc/[pid]/environ
, она не будет отражать изменения, сделанные дочерним процессом.
Даже если вышеперечисленное сработало, у вас возникло бы условие гонки: родитель должен был бы определить «правильное время» для чтения окружения, в идеале сразу после того, как ребенок изменил его.Чтобы сделать это, родитель должен координировать свои действия с ребенком, и пока вы координируете, вы также можете явно общаться.
Вам нужно будет передавать состояние между родителем и дочерним элементом через сокет,конвейер, разделяемая память и т. д. многопроцессорный модуль *1009* может сделать это немного проще, позволяя передавать данные от дочернего к родительскому через очереди или каналы.
Обновлено Воткраткий обзор использования модуля multiprocessing
, чтобы позволить родительскому процессу обмениваться значениями с дочерними процессами, а дочерним процессам связываться друг с другом через очередь.Это довольно просто:
import os
from multiprocessing import Process, Manager, Queue
def worker1(d, q):
# receive value from worker2
msg = q.get()
d['value'] += 1
d['worker1'] = os.getpid(), msg
def worker2(d, q):
# send value to worker1
q.put('hi from worker2')
d['value'] += 1
d['worker2'] = os.getpid()
if __name__ == '__main__':
mgr = Manager()
d = mgr.dict()
q = Queue()
d['value'] = 1
p1 = Process(target=worker1, args=(d,q))
p1.start()
p2 = Process(target=worker2, args=(d,q))
p2.start()
p1.join()
p2.join()
print d
Результат:
{'worker1': (47395, 'hi from worker2'), 'worker2': 47396, 'value': 3}