Я хочу контролировать значение в заданном потоке из другого процесса. Следующее не работает, поскольку dproxy[i]
является значением, а скорее прокси. Как я должен это делать?Изменение состояния в данной нити формирует другой процесс
import multiprocessing
import time
import threading
def g(d):
while d:
print(d)
time.sleep(1)
def f(dproxy):
for i in ("1","2"):
t = threading.Thread(target=g, args=(dproxy[i],))
t.daemon = True
t.start()
time.sleep(10)
manager = multiprocessing.Manager()
dproxy = manager.dict()
dproxy["1"] = "A"
dproxy["2"] = "B"
p = multiprocessing.Process(target=f, args=(dproxy,))
p.daemon = True
p.start()
time.sleep(2)
dproxy["1"] = "C"
time.sleep(2)
UPDATE
Вторая попытка, которая также не работает.
import multiprocessing
import time
import threading
def g(d):
while d:
print(d)
time.sleep(1)
def f(dproxy):
print(type(dproxy["1"]))
for i in ("1","2"):
t = threading.Thread(target=g, args=(dproxy[i],))
t.daemon = True
t.start()
time.sleep(10)
manager = multiprocessing.Manager()
dproxy = manager.dict()
dproxy["1"] = manager.Value("s","A")
dproxy["2"] = manager.Value("s","B")
p = multiprocessing.Process(target=f, args=(dproxy,))
p.daemon = True
p.start()
time.sleep(2)
dproxy["1"].set("C")
time.sleep(2)
Извините, что здесь происходит? единственный простой способ обмена данными между двумя процессами - использовать разделяемую память (если вы хотите указать только события, которые могут вам помочь). Также почему вы настаиваете на смешивании потоков с многопроцессорностью (знаете ли вы о GIL)? – user3012759
@ user3012759 Нет ничего плохого в том, что процесс имеет свои собственные потоки. Я не использую события, которые я использую диспетчер общей памяти. – Baz