回溯未在多线程上下文中显示

时间:2015-07-23 07:30:15

标签: python multithreading

目前,我非常依赖traceback来检查python错误(在我的控制台上)。但是,当错误发生在与主要线程不同的线程中时,控制台上不会输出回溯:

def test(n):
    time.sleep(10-n)
    print(n)
    assert False


#assert False #if uncommented the console correctly show the traceback


with futures.ThreadPoolExecutor(4) as executor:
    res=executor.map(test,range(10))
print("DONE finally")

如果我取消注释"断言错误"返回的回溯是以下一个:

  

追踪(最近一次呼叫最后一次):

     

File" C:/Users/massimo.bono/Documents/PythonWorkspace/AntaresPythonUtils/AntaresUtils/thread_try.py" ;,第14行,

     

断言错误

     

的AssertionError

如果留下评论,控制台的输出如下:

3
2
1
0
4
6
5
7
9
8
DONE finally

Process finished with exit code 0

其他有助于我的信息:

  • 我正在使用python 3.4.3;
  • 我的python控制台是PyCharm Community Edition 4.5.2中嵌入的控制台。
  • 我在Windows 8.1 64bit;

我尝试通过输入python控制台从windows powershell运行相同的python文件,但没有显示回溯。

1 个答案:

答案 0 :(得分:0)

根据我的理解,似乎线程的回溯仍然存在于python运行时中:它们不是简单地打印在stderr上。

您可以通过捕获执行程序调用的方法中的任何异常来解决问题,如下所示:

#this will be executed in a different thread. If any exception is caught
#it will be printed on the console
def thread_safe(n):
    try:
        test(n)
    except Exception as e:
        traceback.print_exc()

with futures.ThreadPoolExecutor(4) as executor:
    res=executor.map(thread_safe,range(10))
print("DONE finally")