1. 按
Python多线程适用于IO密集型的应用场景,与进程不同的是多线程对计算机资源的占用较少。对于Python自带的模块,threading未实现线程池,concurrent实现了线程池。对于concurrent,其设置的超时时间,是返回线程执行结果的返回时间,在达到超时时间后线程池强制返回结果,但不会停止线程。如果我们想要停止某一个线程,那只能把该线程所在的线程池关闭,但关闭线程池会导致线程池里的所有线程全部关闭。所以,如果想用ThreadPoolExecutor实现对某一线程的超时自动终止的话,那在使用时应该在一个线程池里只放一个线程,这样的话,我们后续想要关闭某个线程只需要把该线程所在的线程池关闭就可以了。
2. 实测代码
下面的代码是一个线程池放了两个线程,只是为了让大家明白,当关闭线程池时所有在该线程池里的线程都会停止,在实际应用时,建议一个线程池只放一个线程,这样再想关闭某个线程时就可以放心地把整个线程池关闭了。
from concurrent.futures import ThreadPoolExecutor, TimeoutError
import time
def return_future_result(message):
time.sleep(2)
return message
pool = ThreadPoolExecutor(max_workers=2)
future1 = pool.submit(return_future_result, "hello")
future2 = pool.submit(return_future_result, "world")
print(future1.done())
try:
print(future1.result(timeout=1))
except TimeoutError as err:
pool.shutdown()
print(f'线程{future1}因超时已终止')
print(future1)
print(future2)
print(future2.done())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)