我正在使用python 2.7,並試圖在自己的進程中運行一些CPU繁重的任務。我希望能夠將消息發送回父進程,以通知其進程的當前狀態。多處理隊列似乎是完美的,但我無法弄清楚如何讓它工作。我可以在由Pool.imap調用的函數中使用多處理隊列嗎?
所以,這是我的基本工作例子,減去使用隊列。
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()
我試圖通過隊列在幾個方面,他們得到了錯誤信息「RuntimeError:隊列對象只能進程之間通過繼承共享」。這是我根據我發現的早期答案嘗試的方法之一。 (我在嘗試使用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()
最後,0健身辦法(使它全球)不產生任何的消息,它只是鎖定。
import multiprocessing as mp
import time
q = mp.Queue()
def f(x):
q.put(str(x))
return x*x
def main():
pool = mp.Pool()
results = pool.imap_unordered(f, range(1, 6))
time.sleep(1)
print q.get()
pool.close()
pool.join()
if __name__ == '__main__':
main()
我知道,它可能會與multiprocessing.Process直接和有其他庫來完成這個工作,但我不想從標準庫函數是一個偉大的配合,直到我退避三舍當然,這不僅僅是因爲我缺乏知識,使我無法利用它們。
謝謝。
您是否考慮過使用jug:http://luispedro.org/software/jug? – luispedro 2011-03-31 19:34:09