在下面的示例代码中,我想恢复函数worker
的返回值。我该怎么做呢?这个值存储在哪里?
示例代码:
import multiprocessing
def worker(procnum):
'''worker function'''
print str(procnum) + ' represent!'
return procnum
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print jobs
输出:
0 represent!
1 represent!
2 represent!
3 represent!
4 represent!
[<Process(Process-1, stopped)>, <Process(Process-2, stopped)>, <Process(Process-3, stopped)>, <Process(Process-4, stopped)>, <Process(Process-5, stopped)>]
我似乎在存储在jobs
中的对象中找不到相关的属性。
发布于 2012-05-02 21:55:08
使用shared variable进行通信。例如:
import multiprocessing
def worker(procnum, return_dict):
"""worker function"""
print(str(procnum) + " represent!")
return_dict[procnum] = procnum
if __name__ == "__main__":
manager = multiprocessing.Manager()
return_dict = manager.dict()
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i, return_dict))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print(return_dict.values())
发布于 2015-03-02 05:09:39
我认为@sega_sai建议的方法是更好的方法。但它确实需要一个代码示例,所以下面是:
import multiprocessing
from os import getpid
def worker(procnum):
print('I am number %d in process %d' % (procnum, getpid()))
return getpid()
if __name__ == '__main__':
pool = multiprocessing.Pool(processes = 3)
print(pool.map(worker, range(5)))
它将打印返回值:
I am number 0 in process 19139
I am number 1 in process 19138
I am number 2 in process 19140
I am number 3 in process 19139
I am number 4 in process 19140
[19139, 19138, 19140, 19139, 19140]
如果您熟悉map
(Python2内置),这应该不会太困难。否则,请看看sega_Sai's link。
请注意,所需的代码是多么少。(还要注意进程是如何被重用的)。
发布于 2016-06-10 05:41:45
对于正在寻求如何使用Queue
从Process
获取值的任何其他人
import multiprocessing
ret = {'foo': False}
def worker(queue):
ret = queue.get()
ret['foo'] = True
queue.put(ret)
if __name__ == '__main__':
queue = multiprocessing.Queue()
queue.put(ret)
p = multiprocessing.Process(target=worker, args=(queue,))
p.start()
p.join()
print(queue.get()) # Prints {"foo": True}
请注意,在Windows或Jupyter Notebook中,使用multithreading
时,您必须将其另存为文件并执行该文件。如果在命令提示符下执行此操作,您将看到如下错误:
AttributeError: Can't get attribute 'worker' on <module '__main__' (built-in)>
https://stackoverflow.com/questions/10415028
复制相似问题