2013-05-22 27 views
0

有人能解釋爲什麼這代碼凍結(掛起永遠),的Python:多處理IMAP和動態創建的池凍結

import multiprocessing 
def foo(x): return x 
def main(): 
    print(list(multiprocessing.Pool().imap(foo, iter([1, 2, 3])))) 
main() 

雖然這個變體做工精細,

import multiprocessing 
def foo(x): return x 
pool = multiprocessing.Pool() 
def main(): 
    print(list(pool.imap(foo, iter([1, 2, 3])))) 
main() 

與這一個,

import multiprocessing 
def foo(x): return x 
def main(): 
    print(list(multiprocessing.Pool().map(foo, [1, 2, 3]))) 
main() 

順便提及,能夠在非initializatio動態創建multiprocessing.Pool()在應用程序的n階段,然後使用imap會非常有幫助。我嘗試着在gdb中逐步完成它,並且它似乎被凍結在PyThread_acquire_lock ......但是我覺得在這麼低的級別上進行了非常奇怪的調試。

回答