Как получить доступ к глобальным переменным из отдельных процессов - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть два процесса Python, работающих на разных ядрах, которые должны взаимодействовать друг с другом во время работы. На данный момент я могу добиться этого с помощью многопоточности;

import threading
x=0
def a():
    global x
    if x==100:
        pass
        #Do something

def b():
    global x
    while 1:
        x=x+1
t1=threading.thread(target=a)
t2=threading.thread(target=b)
t1.start()
t2.start()

Но я бы хотел вместо этого использовать модуль multiprocessing. Есть ли способ превратить приведенный выше код во что-то, используя многопроцессорность?

1 Ответ

1 голос
/ 08 ноября 2019

Вот пример, подобный вашему оригиналу, но использующий многопроцессорность ...

from multiprocessing import Process, Value

def a(x):
    while True:
        if x.value == 10:
            print('Done.  x = ', x.value) 
            break

def b(x):
    for _ in range(10):
        x.value += 1

x = Value('i', 0)   # integer with initial value of 0
t1=Process(target=a, args=(x,))
t2=Process(target=b, args=(x,))
t1.start()
t2.start()

Обратите внимание, что хотя я и передал x в качестве параметра функции, похоже, что это все еще работает, если вы простоиспользуйте его как глобальный, как у вас выше. Настоящая хитрость здесь заключается в том, чтобы использовать объект multiprocessing.Value и обращаться к нему с помощью x.value.

...