[英]Python multiprocessing - TypeError: 'Nonetype' object not callable
我在使用 PySQLPool 時遇到了 Python 多處理庫的問題。 它導致我收到以下異常: 'TypeError: 'NoneType' object is not callable'
。
我使用多處理創建了一個 Pool,並在一個虛擬函數上調用Pool.map
。 在map
的參數中,我包含了來自 PySQLPool 的連接。 我已經包含了我可以用下面的代碼重現錯誤的最少代碼:
from config import *
import PySQLPool
import multiprocessing as mp
def a(b):
return b
PySQLPool.getNewPool().maxActiveConnections = 5
connection = PySQLPool.getNewConnection(user=USER,
passwd=PASSWORD,
host='localhost',
db=DATABASE,
use_unicode=True,
charset='utf8',
commitOnEnd=False)
pool = mp.Pool(processes=8)
args = [(connection)]
result_list = pool.map(a, args, 8)
pool.close()
pool.join()
它導致以下錯誤:
Exception in thread Thread-2:
Traceback (most recent call last):
File "/root/.pyenv/versions/2.7.6/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/root/.pyenv/versions/2.7.6/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "/root/.pyenv/versions/2.7.6/lib/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
put(task)
TypeError: 'NoneType' object is not callable
我用 pip 安裝了以下內容
(venv)root@Ubuntu-1204-precise-64-minimal:/usr/share/python-multiproc/src# pip list
MySQL-python (1.2.5)
pip (6.0.8)
PySQLPool (0.3.8)
setuptools (12.0.5)
我已經在 Ubuntu 12.04 和 Python 版本 2.7.3、2.7.6 和 2.7.9 上對其進行了測試。 還在使用 Python 2.7.9 的 Windows 8 上進行了測試。 此外,我已經嘗試過 PySQLPool 0.3.8 和 0.4。
這是什么原因,我該如何調試?
這個模糊的錯誤可能來自傳遞給被調用函數的參數損壞。 由於酸洗/取消酸洗邏輯,復雜對象可能會發生這種情況。
如果可能,請嘗試重新編寫代碼以將絕對最小數量的 args 傳遞給您的函數。 這可能意味着在每個進程內重新創建一些對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.