已编辑
我正在Windows 7 64中为高性能计算作业(使用matplotlib
和jupyter
实现一些动态绘图(使用multiprocessing.Pool.starmap_async
和numpy
和chrome)一点。我使用大小为4的工作程序Pool
计算要绘制的数据,并将主要过程作为绘制过程。
我在此模型中发现,将5-list
/ 5-tuple
(即list
/ tuple
和1 int
和4 {{ {} {1}}中的1}}常常导致仅将部分结果放入float
中。似乎消费者进程因为试图从multiprocessing.Manager.Queue
获取而死了,而里面没有任何东西,并且所有python进程的CPU百分比均为0。
我用Google搜索,发现是否需要将一个Queue
传递给多个进程,我应该使用Queue
而不是Queue
,否则会出现异常。但是,即使我使用multiprocessing.Manager.Queue
,我的python也不会给出multiprocessing.Queue
(尽管在线运行示例确实会抛出Exception
)。
我尝试将multiprocessing.Queue
/ Exception
仅包含一个元素,但突然之间效果很好。我尝试减少每个list
的计算时间,尽管有时它仍然不起作用,但卡在中间的可能性却大大降低了。我终于用tuple
取代了map
,一切正常。
与multiprocessing.Manager.Queue
相比,multiprocessing.Pipe
或multiprocessing.Queue
有问题吗?还是在编写相关代码时需要注意什么?