Вы можете делить переменные между процессами. Использование общей памяти.
from multiprocessing import Process, Value, Array
def f(n, a):
n.value = 3.1415927
for i in range(len(a)):
a[i] = -a[i]
if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10))
p = Process(target=f, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])
Value
и Array
- это специальные объекты, которые позволяют вам разделять состояние между ними. d
и i
- это коды типов переменных, которыми вы хотите поделиться.
Однако это решение не предоставляет никакого механизма синхронизации. Вы должны быть осторожны, чтобы не читать и не писать одновременно.
Также это решение можно использовать только для простых значений. Если вам нужно поделиться объектом, вы должны взглянуть на Manager
класс в multiprocessing
модуле.
Приложение из документов
Менеджер, возвращаемый Manager (), будет поддерживать список типов, dict, пространство имен, Lock, RLock, семафор, BoundedSemaphore, условие, событие, барьер, очередь, значение и массив
Итак, как вы видите, вы также можете поделиться RLock
, чтобы настроить механизм синхронизации для чтения и записи ваших общих переменных.
Подробнее здесь: https://docs.python.org/3.5/library/multiprocessing.html#sharing-state-between-processes