我正在使用python 2.7,并尝试在自己的进程中运行一些CPU繁重的任务.我希望能够将消息发送回父进程,以使其了解进程的当前状态.多处理队列似乎是完美的,但我无法弄清楚如何让它工作.
所以,这是我的基本工作示例,减去队列的使用.
import multiprocessing as mp
import time
def f(x):
return x*x
def main():
pool = mp.Pool()
results = pool.imap_unordered(f, range(1, 6))
time.sleep(1)
print str(results.next())
pool.close()
pool.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我尝试过以几种方式传递Queue,并且它们收到错误消息"RuntimeError:Queue对象应该只通过继承在进程之间共享".这是我根据我发现的早期答案尝试的方法之一.(我在尝试使用Pool.map_async和Pool.imap时遇到同样的问题)
import multiprocessing as mp
import time
def f(args):
x = args[0]
q = args[1]
q.put(str(x))
time.sleep(0.1)
return x*x
def main():
q = mp.Queue()
pool = mp.Pool()
results = pool.imap_unordered(f, ([i, q] for i in range(1, 6)))
print str(q.get())
pool.close()
pool.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
最后,0适应方法(使其成为全局)不会生成任何消息,它只是锁定. …