一般来说,我对 Python 和多线程编程还很陌生。基本上,我有一个脚本可以将文件复制到另一个位置。我希望将其放置在另一个线程中,以便我可以输出 ....
以指示脚本仍在运行。
我遇到的问题是,如果无法复制文件,它将引发异常。如果在主线程中运行,这是可以的;但是,具有以下代码不起作用:
try:
threadClass = TheThread(param1, param2, etc.)
threadClass.start() ##### **Exception takes place here**
except:
print "Caught an exception"
在线程类本身,我试图重新抛出异常,但它不起作用。我看到这里的人问过类似的问题,但他们似乎都在做比我想做的更具体的事情(而且我不太明白所提供的解决方案)。我见过有人提到 sys.exc_info()
的用法,但我不知道在哪里或如何使用它。
编辑: 线程类的代码如下:
class TheThread(threading.Thread):
def __init__(self, sourceFolder, destFolder):
threading.Thread.__init__(self)
self.sourceFolder = sourceFolder
self.destFolder = destFolder
def run(self):
try:
shul.copytree(self.sourceFolder, self.destFolder)
except:
raise
原文由 Phanto 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是
thread_obj.start()
立即返回。您生成的子线程在其自己的上下文中执行,具有自己的堆栈。那里发生的任何异常都在子线程的上下文中,并且在它自己的堆栈中。我现在能想到的将此信息传递给父线程的一种方法是使用某种消息传递,因此您可能会研究一下。试试这个尺寸: