草庐IT

TuningPerformance-pooling

全部标签

python - 如何命名 multiprocessing.pool 中的进程?

如果我创建一个包含4个工作线程的池并设置它们执行某些任务(使用pool.apply_async(..)),我可以使用从内部访问每个进程的名称multiprocessing.current_process().name,但如何设置父进程的名称(这主要用于日志记录)? 最佳答案 Process.name是justasetter,你可以自由分配给它。池需要initializer争论。这可以是任何可调用的,并且它会在每个子进程启动时被调用一次。您可以将其指向一个函数,该函数将该进程的name属性设置为您想要的任何值。

python - multiprocessing.pool.ApplyResult 的文档在哪里?

multiprocessing.pool.ApplyResult的严格API文档少得吓人(阅读:零)。多处理解释文档谈到了ApplyResult,但没有定义它们。这似乎也适用于multiprocessing.pool.Pool,尽管Python多处理指南似乎更好地涵盖了它。即使是ApplyResulthelp()结果也是微不足道的:|get(self,timeout=None)||ready(self)||successful(self)||wait(self,timeout=None)Get()和Ready()我明白了。这些都很好。我完全不知道wait()是做什么用的,因为你处理一个

python - 超时后如何中止 multiprocessing.Pool 中的任务?

我正在尝试以这种方式使用python的多处理包:featureClass=[[1000,k,1]forkindrange(start,end,step)]#listofargumentsforfinfeatureClass:pool.apply_async(worker,args=f,callback=collectMyResult)pool.close()pool.join在池的进程中,我想避免等待那些需要超过60秒才能返回结果的进程。这可能吗? 最佳答案 这是一种无需更改worker函数即可执行此操作的方法。需要两个步骤:使用可

python - multiprocessing.Pool 挂起如果 child 导致段错误

我想使用multiprocessing.Pool并行应用一个函数。问题在于,如果一个函数调用触发了一个段错误,则Pool将永远挂起。有人知道我如何制作一个Pool来检测何时发生此类事件并引发错误吗?以下示例显示了如何重现它(需要scikit-learn>0.14)importnumpyasnpfromsklearn.ensembleimportgradient_boostingimporttimefrommultiprocessingimportPoolclassBad(object):tree_=Nonedeffit_one(i):ifi==3:#thiswillsegfaultba

python - 无法使用 python 的多处理 Pool.apply_async() 腌制 <type 'instancemethod'>

我想运行这样的东西:frommultiprocessingimportPoolimporttimeimportrandomclassControler(object):def__init__(self):nProcess=10pages=10self.__result=[]self.manageWork(nProcess,pages)defBarcodeSearcher(x):returnx*xdefresultCollector(self,result):self.__result.append(result)defmanageWork(self,nProcess,pages):po

Python 多处理 : pool. 映射与使用队列

我正在尝试为Python使用multiprocessing包。在查看教程时,最清晰和最直接的技术似乎是使用pool.map,它允许用户轻松命名进程数并通过pool.map函数和该函数的值列表以在CPU之间分配。我遇到的另一种技术是usingqueues管理worker池。这answer很好地解释了pool.map、pool.apply和pool.apply_async之间的区别,但是它们的优缺点是什么使用pool.map与使用此example中的队列? 最佳答案 pool.map技术是队列技术的“子集”。也就是说,即使没有pool.

Python 多处理 : pool. 映射与使用队列

我正在尝试为Python使用multiprocessing包。在查看教程时,最清晰和最直接的技术似乎是使用pool.map,它允许用户轻松命名进程数并通过pool.map函数和该函数的值列表以在CPU之间分配。我遇到的另一种技术是usingqueues管理worker池。这answer很好地解释了pool.map、pool.apply和pool.apply_async之间的区别,但是它们的优缺点是什么使用pool.map与使用此example中的队列? 最佳答案 pool.map技术是队列技术的“子集”。也就是说,即使没有pool.

python - Multiprocessing.Pool 使 Numpy 矩阵乘法变慢

所以,我正在尝试使用multiprocessing.Pool和Numpy,但似乎我错过了一些重要的点。为什么pool版本要慢得多?我查看了htop,我可以看到创建了多个进程,但它们都共享一个CPU,加起来约为100%。$cattest_multi.pyimportnumpyasnpfromtimeitimporttimeitfrommultiprocessingimportPooldefmmul(matrix):foriinrange(100):matrix=matrix*matrixreturnmatrixif__name__=='__main__':matrices=[]forii

python - Multiprocessing.Pool 使 Numpy 矩阵乘法变慢

所以,我正在尝试使用multiprocessing.Pool和Numpy,但似乎我错过了一些重要的点。为什么pool版本要慢得多?我查看了htop,我可以看到创建了多个进程,但它们都共享一个CPU,加起来约为100%。$cattest_multi.pyimportnumpyasnpfromtimeitimporttimeitfrommultiprocessingimportPooldefmmul(matrix):foriinrange(100):matrix=matrix*matrixreturnmatrixif__name__=='__main__':matrices=[]forii

python - multiprocessing.Pool in jupyter notebook 适用于 linux 但不适用于 windows

我正在尝试运行一些独立的计算(尽管从相同的数据中读取)。我的代码在Ubuntu上运行时有效,但在Windows(windowsserver2012R2)上运行时无效,出现错误:'模块'对象没有属性...当我尝试使用multiprocessing.Pool时(它出现在内核控制台中,而不是笔记本本身的输出)(我已经犯了在创建池之后定义函数的错误,我也纠正了它,这不是问题)。即使在最简单的示例中也会发生这种情况:frommultiprocessingimportPooldeff(x):returnx**2pool=Pool(4)forresinpool.map(f,range(20)):pr