python - 如何捕捉多处理退出原因?
问题描述
使用pythonmultiprocessing
包创建进程时,运行该进程几次后。子进程会退出,不会抛出异常,那么如何找到这个进程退出的原因呢?
task = create_process('plugin1', start_process)
task.join()
if task.exception:
pid, e, tb = task.exception
def create_process(name, func):
task = Process(target=func, name=name, args=(name,))
task.daemon = True
task.start()
return task
class Process(multiprocessing.Process):
def __init__(self, *args, **kwargs):
multiprocessing.Process.__init__(self, *args, **kwargs)
self._pconn, self._cconn = multiprocessing.Pipe()
self._exception = None
def run(self):
try:
multiprocessing.Process.run(self)
print(50 * '1', os.getpid(), self.name)
import setproctitle
setproctitle.setproctitle("test5")
print(50 * '0', os.getpid(), self.name)
self._cconn.send(None)
except Exception as e:
tb = traceback.format_exc()
self._cconn.send((os.getpid(), e, tb))
@property
def exception(self):
if self._pconn.poll():
self._exception = self._pconn.recv()
return self._exception
解决方案
推荐阅读
- javascript - 是这个 w3schools javascript 示例的错误,还是我的错误?
- php - 从子关系 OOP Laravel 中获取父模型
- reactjs - 如何在反应中将单个字母与 onChange 事件分开?
- python - 无法使用 pythons SPARQLWrapper 从 GraphDB 中删除任何三元组
- javascript - 如何根据我的代码和 JSON 响应对象显示下拉菜单列表?
- python - 通过从列表中获取值,根据列值动态删除 Pandas 中的 DataFrame 行
- mysql - 如何使此选择查找另一个表并找到第一个匹配项?
- bash - uniq -c 用于计算文件中的重复行不起作用
- python - 在 Python 中使用正则表达式从字符串中提取坐标
- python - 无法在 Catalina 上编辑和重新排序路径