第一个问题是Value和Manager()之间有什么区别.值?
第二,是否可以在不使用Value的情况下共享整数变量?以下是我的示例代码.我想要的是获取一个值为整数的字典,而不是值.我所做的只是在整个过程之后改变它.有没有更简单的方法?
from multiprocessing import Process, Manager
def f(n):
n.value += 1
if __name__ == '__main__':
d = {}
p = []
for i in range(5):
d[i] = Manager().Value('i',0)
p.append(Process(target=f, args=(d[i],)))
p[i].start()
for q in p:
q.join()
for i in d:
d[i] = d[i].value
print d
Run Code Online (Sandbox Code Playgroud) 我写了一个这样的程序:
from multiprocessing import Process, Manager
def worker(i):
x[i].append(i)
if __name__ == '__main__':
manager = Manager()
x = manager.list()
for i in range(5):
x.append([])
p = []
for i in range(5):
p.append(Process(target=worker, args=(i,)))
p[i].start()
for i in range(5):
p[i].join()
print x
Run Code Online (Sandbox Code Playgroud)
我想在进程之间创建一个列表的共享列表,每个进程都会修改其中的列表.但是这个程序的结果是一个空列表列表:[[],[],[],[],[]].
出了什么问题?
我有一个python工具,基本上具有这种设置:
main process (P1) -> spawns a process (P2) that starts a tcp connection
-> spawns a thread (T1) that starts a loop to receive
messages that are sent from P2 to P1 via a Queue (Q1)
server process (P2) -> spawns two threads (T2 and T3) that start loops to
receive messages that are sent from P1 to P2 via Queues (Q2 and Q3)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我停止程序(使用Ctrl + C)时,它不会退出。服务器进程已结束,但主要进程仅挂在那里,我必须将其杀死。
线程循环函数看起来都一样:
def _loop(self):
while self.running:
res = self.Q1.get()
if res is None: …Run Code Online (Sandbox Code Playgroud)