Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python多处理中查找异常_Python_Multithreading_Multiprocessing_Stack Trace - Fatal编程技术网

在python多处理中查找异常

在python多处理中查找异常,python,multithreading,multiprocessing,stack-trace,Python,Multithreading,Multiprocessing,Stack Trace,我有一些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) 当我设置串行标志时,它运行正常,但当使用池时,它会出现以下错误。当我试图打印do\u

我有一些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)
当我设置
串行
标志时,它运行正常,但当使用
时,它会出现以下错误。当我试图打印
do\u 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

进行调试的好方法是什么?

我回到我的git历史记录,直到找到一个仍在工作的提交


我在我的代码中添加了一个扩展了
dict
的类,这样就可以用
(so
dict.foo
而不是
dict[“foo”]
)来访问密钥。多处理并没有善待这一点,使用普通dict解决了这个问题。

这可能没关系,但
cpu\u count()的返回值是多少
?取决于系统。2在我自己的笔记本电脑上。8在服务器上。无论哪种方式;如果使用
pool.map
代替
map
,事情都会中断。请注意,您确实不必这样做。使用普通类,然后执行
self.\uu dict\uuuuu.update()
Wow,巧合的是,我添加了完全相同类型的类,这也破坏了我的多处理。这听起来非常出乎意料。知道这个错误的根本原因是什么吗?是Python解释器中的错误吗?也许它打破了允许死锁的原子访问?当我实现一些自然类属性时,同样的错误也发生在我身上用户可以通过定义
\uuuu getattr\uuuu
方法来控制的功能,这种方式最终导致了``NoneType`异常,而在我删除该方法后,错误消失了。我想原因是打破了类的正常pickle方式。