簡體   English   中英

Python 多處理 - TypeError: 'Nonetype' 對象不可調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM