我的用例是捕捉python多处理进程中发生的所有异常。所以在一些网络搜索的帮助下,我想出了以下代码:
import multiprocessing as mp
class Process(mp.Process):
def __init__(self, *args, **kwargs):
mp.Process.__init__(self, *args, **kwargs)
self._pconn, self._cconn = mp.Pipe()
self._exception = None
def run(self):
try:
mp.Process.run(self)
self._cconn.send(None)
except Exception as e:
tb = traceback.format_exc()
self._cconn.send((e, tb))
@property
def exception(self):
if self._pconn.poll():
self._exception = self._pconn.recv()
return self._exception
然后在我的主代码中,我捕捉到以下错误:
^{pr2}$这对轻活儿来说效果很好(比如10分钟内完成1000次)。但是当任务繁重(1000个工作在3小时内完成)时,后续的运行就很慢了。我发现有两件事我正在寻求解决办法:
1)当代码运行时,会创建许多进程(当我在命令行上选中top时),大多数进程什么都不做,也不会减慢运行时的速度。这是我忽视的问题吗?在
2)当我运行一个重任务时,所有后续的重任务都会被延迟。这似乎是因为有一些剩余的进程从旧的繁重的工作中遗留下来,并继续与新的运行分担负载。在
代码是否提供了任何提示,为什么我的运行不是傻瓜证明和显示可变的运行时间?在
请随时询问具体细节,我将提供他们,我不确定可能需要什么,所以我开始一个普遍的查询。在
编辑1: 下面是我如何创建流程
jobs = []
for i in range(num_processes):
p = Process(target=func, args=(inqueue, outqueue))
jobs.append(p)
p.start()
目前没有回答
相关问题 更多 >
编程相关推荐