有很多类似的问题和疑问,但我还是找不到可靠的答案。在
所以,我有一个函数,可能会运行太长。函数是私有的,在某种意义上我不能改变它的代码。在
我想把它的执行时间限制在60秒。 我尝试了以下方法:
TimeoutException
之后仍然存在。在multiprocessing
python模块。我有腌制的问题,我不知道怎么解决。我想做限时装饰器,在顶层导入所需函数有问题。长时间执行的函数是实例方法,包装它也无助于。。。在那么,上述问题有没有好的解决方案呢?
如何杀死线程,我开始?
如何使用子流程和避免酸洗问题?
subprocess
模块是否有任何帮助?在
谢谢。在
我认为多处理方法是你唯一的选择。你是正确的,线程不能被杀死(很好),信号有跨平台的问题。下面是一个多处理实现:
我知道你说过你有酸洗问题,但这些问题几乎总是可以通过重构来解决的。例如,您说过long函数是一个实例方法。您可以包装这些类型的函数,以便在多处理中使用它们:
^{pr2}$要在工作线程池中使用该方法,请将此包装器添加到模块的顶层:
例如,现在您可以在这个类方法上使用
apply_async
,该类方法来自同一类的另一个方法:我确信这些包装器只有在使用multiprocessing.Pool而不是用multiprocessing.Process对象启动子进程时才是必要的。另外,我敢打赌很多人都会不赞成这种结构,因为你破坏了类提供的漂亮、干净的抽象,并且在类和其他随机包装函数之间建立了依赖关系。你必须决定让你的代码更难看是否值得。在
一个answer到 Is it possible to kill a process on Windows from within Python?可能有帮助: 您需要终止该子进程或线程: "Terminating a subprocess on windows"
或许TerminateThread也有帮助
相关问题 更多 >
编程相关推荐