2012-05-30 70 views
5

我有一些Python代碼如下所示:查找異常

procs = cpu_count()-1 
if serial or procs == 1: 
    results = map(do_experiment, experiments) 
else: 
    pool = Pool(processes=procs)  
    results = pool.map(do_experiment, experiments) 

它運行正常,當我設置serial標誌,但它提供了以下錯誤使用Pool時。當我嘗試從do_experiment打印某些東西時,什麼也沒有顯示出來,所以我不能嘗試/在那裏打印並打印堆棧跟蹤。

Exception in thread Thread-2: 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 530, in __bootstrap_inner 
    self.run() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 483, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 285, in _handle_tasks 
    put(task) 
TypeError: 'NoneType' object is not callable 

什麼是繼續調試的好方法?

+0

這可能沒有關係,但cpu_count()的返回值是多少? – mgilson

+0

取決於系統,2取決於我自己的筆記本電腦,8取決於服務器,無論哪種方式;如果使用'pool.map' 'map',things break。 – noio

回答

13

我回到了我的git歷史記錄,直到我發現一個提交的東西仍在工作。

我添加了一個類來我的代碼擴展dict使按鍵可以在dict["foo"]。多重代替一個.(所以dict.foo訪問沒有欣然接受這一點,使用普通的字典解決了這個問題。

+1

作爲一個說明,你真的不需要這樣做,使用一個普通的類,然後做'self .__ dict __。update()' – Voo

+1

哇,巧合的是我添加了完全相同的sor t類是什麼打破了我的多處理。 – Ryan

+0

這聽起來最令人意想不到。任何想法這個錯誤的根源可能是什麼?這是Python解釋器中的錯誤嗎? –