我一直在制作基因程序而且我遇到了一个问题。似乎它会尝试计算大指数,但冻结(这是可以理解的,因为它是一个很大的数字)在这个过程中。有没有办法计算执行时间?这样我就可以在冻结几分钟之前停止计算。谢谢你的帮助!
答案 0 :(得分:0)
一般来说,你真的不想做你所要求的。 (事实上,那里有不止一个红旗。)但如果你这样做:
你可以让某些东西运行的唯一方法,也就是计时,就是把它放在一个单独的线程或进程中。
如果你想强行打断某些东西,它必须是一个过程。
所以,例如:
import multiprocessing
def try_slow_thing(function, args, timeout):
p = multiprocessing.Process(target=function, args=args)
p.start()
p.join(timeout)
if p.is_alive():
p.terminate()
raise TimeoutError("stupid process wouldn't finish")
如果你想从函数中返回一个值,或者从主进程中共享值,或者除了“运行并完成或不执行”之外的其他任何东西,请阅读multiprocessing
的介绍部分。文档并略过其余部分。 (事实上,无论如何都这样做。)