为什么在Python中没有报告来自多处理的错误,以及如何打开报告错误?

Why no errors from multiprocessing is reported in Python and how to switch on reporting errors?(为什么在Python中没有报告来自多处理的错误,以及如何打开报告错误?)
本文介绍了为什么在Python中没有报告来自多处理的错误,以及如何打开报告错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设置了一些简单的代码来测试多处理的一些问题处理,我无法跟踪该代码中的错误,因为没有来自进程的反馈。既然我现在对它视而不见,我怎么能从子进程接收子进程的异常。如何调试此代码。

# coding=utf-8
import multiprocessing
import multiprocessing.managers
import logging

def callback(result):
  print multiprocessing.current_process().name, 'callback', result

def worker(io_lock, value):
  # error
  raise RuntimeError()
  result = value + 1
  with io_lock:
    print multiprocessing.current_process().name, value, result
  return result

def main():
  manager = multiprocessing.Manager()
  io_lock = manager.Lock()
  pool = multiprocessing.Pool(multiprocessing.cpu_count())
  for i in range(10):
    print pool.apply_async(worker, args=(io_lock, i), callback = callback)
  pool.close()
  pool.join()

if __name__ == '__main__':
  logging.basicConfig(level = logging.DEBUG)
  main()

推荐答案

您可以尝试、捕获和记录工作进程内发生的异常。大概是这样的

def worker(io_lock, value):
    try:
        raise RuntimeError('URGH') # Or do your actual work here
    except:
        logging.exception('Exception occurred: ')
        raise  # Re-raise the exception so that the process exits 

异常日志处理程序将自动包括堆栈跟踪。

这篇关于为什么在Python中没有报告来自多处理的错误,以及如何打开报告错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)