Python 如何检查线程(从一堆线程中)是否抛出异常?
我创建了一个运行多个线程的脚本。每个线程在无限循环中运行一个函数。我想知道是否有线程抛出异常 以下是线程启动的基本结构:Python 如何检查线程(从一堆线程中)是否抛出异常?,python,multithreading,exception,Python,Multithreading,Exception,我创建了一个运行多个线程的脚本。每个线程在无限循环中运行一个函数。我想知道是否有线程抛出异常 以下是线程启动的基本结构: def main(): VODP = Packager() WINSCP = WinSCP() threadList = [] threadList.append(threading.Thread(target=VODP.scan)) threadList.append(threading.Thread(target=WINSCP.ft
def main():
VODP = Packager()
WINSCP = WinSCP()
threadList = []
threadList.append(threading.Thread(target=VODP.scan))
threadList.append(threading.Thread(target=WINSCP.ftp_sender))
threadList.append(threading.Thread(target=WINSCP.ftp_status_checker))
threadList.append(threading.Thread(target=WINSCP.synchronize))
for thread in threadList:
thread.start()
for thread in threadList:
thread.join()
main()
下面是一个在无限循环中具有函数的类的示例:
class Packager:
def __init__(self):
self.rootDir, self.scanTime, self.extendedScanTime = self.configure_packager()
self.foldersReadyToPack = []
def scan(self):
while True:
if self.foldersReadyToPack == []:
for dirpath, dirnames, filenames in os.walk(self.rootDir):
if(folder_verifier(dirpath)):
#print("Currently scanned folder: ", dirpath)
package_creator(dirpath)
if len(self.foldersReadyToPack) > 0:
#print(f'Folders with suitable files has been found!')
packingQueue = PackingQueue(self.foldersReadyToPack)
packingQueue.execute_packing()
self.foldersReadyToPack = packingQueue.elements
我怎样才能做到这一点?如何获取线程抛出异常并且不再在无限循环中执行其任务的信息?当程序中出现可疑情况时,我想将这些信息传递给负责发送电子邮件的班级。您可以使用:
请看一下这个主题,你可能会发现它很有帮助,因为有很多方法可以从线程中获得结果:(我建议看一下
concurrent.futures
)。因此在我的例子中,由于foo\u with_exc
功能是无限重复的,我应该把try
语句放在之前,而True
和语句除外,除了产生错误的
语句?或者我应该在启动/连接线程时放置它?
import concurrent.futures
def foo_with_exc(a, b):
raise ValueError()
def thread_starter():
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
future = executor.submit(foo_with_exc, 1, 2)
# Raise any exceptions raised by thread
return future.result()
try:
thread_starter()
except ValueError as e:
print("Exception!")