Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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中的apply_async不使用所有可用的工作线程_Python_Multiprocessing_Pool - Fatal编程技术网

为什么python中的apply_async不使用所有可用的工作线程

为什么python中的apply_async不使用所有可用的工作线程,python,multiprocessing,pool,Python,Multiprocessing,Pool,如果答案显而易见,那么很抱歉这个天真的问题。我觉得我正在与python中的多处理模块作斗争,因为我真的不知道发生了什么。代码如下所示: pool=Pool() for i in xrange(1000000): for j in xrange(i+1,1000000): pool.apply_async(myfun,((i,j),),callback=mycallback) 我的想法是通过将每个apply_async分配给一个核心(我有16个核心),来并行化这个大for

如果答案显而易见,那么很抱歉这个天真的问题。我觉得我正在与python中的多处理模块作斗争,因为我真的不知道发生了什么。代码如下所示:

pool=Pool()
for i in xrange(1000000):
    for j in xrange(i+1,1000000):
        pool.apply_async(myfun,((i,j),),callback=mycallback)
我的想法是通过将每个apply_async分配给一个核心(我有16个核心),来并行化这个大for循环。然而,16名工人中只有4或5人在工作,而其他人则在空转。有什么想法吗?先谢谢你


p、 回调函数非常简单。它对myfun返回的值做了一个柱状图

myfun有多重?如果完成得太快,瓶颈将变成IPC(序列化/反序列化和发送参数/结果)并调用回调。@mata,谢谢您的回复。myfun将几个大小为100000的稀疏矩阵相乘。所以它不是太快,但仍然不到1秒。我尝试了一个非常简单的myfun,它将I和j相乘。原来只有一名工人在工作。所以我猜你的答案是正确的。有没有办法做好我的工作?谢谢如果你乘以稀疏矩阵,结果会变得比原始矩阵稀疏得多,因此根据结果的稀疏程度及其表示形式,10e5矩阵的串行化可能会非常大,这将是并行化的一个限制因素。如果不知道你要解决的实际问题,很难说有没有办法解决。你对结果做了什么?@mata:myfun的输出是一个标量,它是矩阵和向量乘积的结果。回调函数计算mufun值的直方图。它决定myfun的输出属于50个箱子中的哪一个。我现在的解决方法是将mycallback合并到myfunc中,并使用imap。然后它就起作用了。谢谢你的建议