在ThreadPoolExecutor超时后退出脚本,可以通过以下步骤实现:
import concurrent.futures
import time
import sys
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
其中,max_workers
参数指定线程池中的最大线程数。
def task():
# 任务逻辑
time.sleep(10) # 模拟任务执行时间
return '任务执行完成'
future = executor.submit(task)
try:
result = future.result(timeout=5) # 设置超时时间为5秒
print(result) # 打印任务执行结果
except concurrent.futures.TimeoutError:
print('任务超时,即将退出脚本')
executor.shutdown(wait=False) # 立即关闭线程池
sys.exit(1) # 退出脚本,返回非零状态码
在超时时间内,通过future.result(timeout)
方法获取任务的执行结果。如果超时时间内任务未完成,会抛出concurrent.futures.TimeoutError
异常。在捕获到超时异常后,打印提示信息,然后调用executor.shutdown()
方法立即关闭线程池,并使用sys.exit(1)
退出脚本,返回非零状态码。
完整代码示例:
import concurrent.futures
import time
import sys
def task():
# 任务逻辑
time.sleep(10) # 模拟任务执行时间
return '任务执行完成'
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
future = executor.submit(task)
try:
result = future.result(timeout=5) # 设置超时时间为5秒
print(result) # 打印任务执行结果
except concurrent.futures.TimeoutError:
print('任务超时,即将退出脚本')
executor.shutdown(wait=False) # 立即关闭线程池
sys.exit(1) # 退出脚本,返回非零状态码
这种方式可以在ThreadPoolExecutor超时后,及时退出脚本,避免任务长时间阻塞。
领取专属 10元无门槛券
手把手带您无忧上云