基本上,'刷新'是一个缓存功能,而打印机'旨在将结果提供给输出。 显然,这个例子在某些时候失败了,遗憾的是,python docs对此毫无帮助。 除了解释之外,工作代码将受到高度赞赏。
from multiprocessing import Manager, Process
from random import randrange
import time
manager = Manager()
x = manager.list()
def refresh():
global x
while True:
y = []
for i in range(5):
y.append(randrange(100))
x = y
time.sleep(0.2)
def printer():
while True:
global x
print(x)
# Mind the different interval compared to 'refresh'
time.sleep(0.3)
if __name__=='__main__':
p = Process(target=refresh)
p.start()
p1 = Process(target=printer)
p1.start()
答案 0 :(得分:1)
当您编写x = y
时,您将manager.list()
对象替换为普通list()
对象,不会共享任何内容。
如果要继续使用此范例,可以使用命名空间对象:
n = manager.Namespace()
def refresh():
...
n.x = y
def printer():
...
print(n.x)
ps:您需要使用join
等待子进程完成,否则Manager
将在退出主(父)进程时退出:
p.join()
p1.join()
答案 1 :(得分:0)
在refresh
,您没有修改x
,而是替换:
def refresh():
global x
while True:
y = []
for i in range(5):
y.append(randrange(100))
## IN THIS LINE HERE
##
## When you set x = y, you're replaced your manager.list() with
## a normal, unshared list.
x = y
time.sleep(0.2)
您可以将其替换为:
x[:] = y
这将取代x
的内容。