在以下代码中:
import threading
def infinite_loop():
while True:
pass
def huge_sum():
return sum(range(2**100))
thread = threading.Thread(target=huge_sum)
thread.start()
thread.join(1)
print("Done")
我希望脚本在一秒后打印"Done",因为join()
将超时,但脚本却挂起.如果您将对huge_sum
的呼叫替换为infinite_loop
,则可以正常工作.问题似乎出在内置的sum()
功能上.
有没有一种方法可以可靠地获得类似join()
的超时行为no matter what the thread is doing?我不介意古怪的元编程解决方案,这是一个非常小众的应用程序.然而,在大多数情况下,我不能修改在线程内执行的代码(例如,"使用循环而不是sum
"不是一个解决方案).
Linux、Python3.8.