Вы спрашиваете о общих значениях .
Но вам необходимо изменить дизайн своего приложения. Вместо двух разных файлов a.py и b.py вам нужен один главный файл, который объединяет оба:
from multiprocessing import Process, Manager
def a_worker(shared_var, *args):
print("A", shared_var.value, args)
shared_var.value += 1
def b_worker(shared_var, *args):
print("B", shared_var.value, args)
shared_var.value += 1
if __name__ == "__main__":
manager = Manager()
var = manager.Value('i', 0) # shared variable
print("Initial value: ", var.value)
a_proc = Process(target=a_worker, args=(var, "a_args"))
b_proc = Process(target=b_worker, args=(var, "b_args"))
# Spawn processes
a_proc.start()
b_proc.start()
# Wait for processes to terminate
a_proc.join()
b_proc.join()
print("After a & b finished: ", var.value)
Здесь a_worker
и b_worker
- это функции, которые реализуют бизнес-логи c a.py
и b.py
. Подробнее см. Python многопроцессорная библиотека
ОБНОВЛЕНИЕ
Стратегия пинг-понга. Процесс A увеличивается, затем процесс B увеличивается, затем процесс A увеличивается, затем ... пока общая переменная не достигнет 10:
from multiprocessing import Process, Manager, Pipe
def a_worker(shared_var, pipe):
while shared_var.value < 10:
print("A", shared_var.value)
shared_var.value += 1
pipe.send("Your turn")
pipe.recv()
pipe.close()
def b_worker(shared_var, pipe):
while shared_var.value < 10:
pipe.recv()
print("B", shared_var.value)
shared_var.value += 1
pipe.send("Your turn")
pipe.close()
if __name__ == "__main__":
manager = Manager()
var = manager.Value('i', 0) # shared variable
a_conn, b_conn = Pipe()
print("Initial value: ", var.value)
a_proc = Process(target=a_worker, args=(var, a_conn))
b_proc = Process(target=b_worker, args=(var, b_conn))
# Spawn processes
a_proc.start()
b_proc.start()
# Wait for processes to terminate
a_proc.join()
b_proc.join()
print("After a & b finished: ", var.value)
Эта программа использует конвейер для координации A и B. Процесс A запускается, что-то делает , затем передает управление B и ждет, пока оно не вернется обратно. Процесс B начинает ждать A, получает сообщение от A, увеличивает переменную и передает управление обратно.