我在网上查了一下,发现了一些关于运行带超时的代码的讨论和ActiveState菜谱。看来有一些常见的方法:
join中设置超时。如果超时时间过了-关闭线程。在Python (使用私有_Thread__stop函数)中不直接支持这一点,所以它是坏实践。signal.SIGALRM --但是这种方法不适用于!那么,什么是是正确的方式?我不是在问解决方法(例如使用Twisted和异步IO),而是实际解决实际问题的方法--我有一些功能,我只想在超时的情况下运行它。如果超时时间过了,我想要恢复控制权。我希望它能在Linux和Windows上运行。
发布于 2011-08-11 14:46:21
一个完全通用的解决方案,真的,老实说,是不存在的。您必须为给定的域使用正确的解决方案。
9**(9**9)),则需要在另一个进程中运行它。这是充分隔离它的唯一简单方法。仅在事件系统或其他线程中运行它是不够的。还可以像其他解决方案一样将事情分解成小块,但需要非常小心的处理,而且通常不值得这样做;无论如何,这不允许您执行与运行Python代码相同的操作。发布于 2011-08-09 07:45:45
您可能需要的是多处理模块。如果subprocess太重,那么这也可能不适合您的需要。
import time
import multiprocessing
def do_this_other_thing_that_may_take_too_long(duration):
time.sleep(duration)
return 'done after sleeping {0} seconds.'.format(duration)
pool = multiprocessing.Pool(1)
print 'starting....'
res = pool.apply_async(do_this_other_thing_that_may_take_too_long, [8])
for timeout in range(1, 10):
try:
print '{0}: {1}'.format(duration, res.get(timeout))
except multiprocessing.TimeoutError:
print '{0}: timed out'.format(duration)
print 'end'发布于 2011-08-11 17:48:35
如果它与网络相关,您可以尝试:
import socket
socket.setdefaulttimeout(number)https://stackoverflow.com/questions/6947065
复制相似问题