python程序运行超时_关于Windows:在python中运行超时代码的正确方法

在Python中处理程序运行超时,常见的方法包括使用线程、信号处理(不适用于Windows)、子进程等。然而,直接杀死线程不是好做法。在Windows和Linux上,可以使用`multiprocessing`模块的子进程来实现超时控制,当超时时可以终止子进程。如果要避免进程过于沉重,可以预先创建进程池。另外,`sys.settrace()`和`eventlet`库也可用于超时控制,但可能会影响代码性能。正确处理超时问题取决于具体的应用场景和代码行为。
摘要由CSDN通过智能技术生成

我在网上找到了一些关于超时运行代码的讨论和活动模式。看起来有一些常见的方法:

使用运行代码的线程,并使用带有超时的join。如果超时时间已过-终止线程。这在python(使用的私有_Thread__stop函数)中不直接支持,因此这是不好的做法。

使用signal.SIGALRM—但这种方法不适用于Windows!

使用带有超时的子进程-但这太重了-如果我想经常启动可中断的任务,我不希望为每个任务都触发进程怎么办!

那么,正确的方法是什么?我不是在问解决方法(例如使用Twisted和AsyncIO),而是实际解决实际问题的方法——我有一些函数,我只想在超时的情况下运行它。如果超时时间已过,我希望控制权恢复。我希望它能在Linux和Windows上工作。

杀死一个代码是一个糟糕的实践,但如果你想这样做,线程是最好的方法。

我假设您不能修改相关代码?

@当然不能。否则我不会问的。

我认为扭曲不是解决方法,而是解决方法。

你能准确地说你在做什么吗?你运行的代码是什么?

没有正确的方法,这取决于你打断了什么,它保持了什么共享状态,等等。

这取决于你的算法,如果它是迭代的,你可以放弃控制权,如果它是IO,你可以select等等…

@本杰明:只是好奇而已。代码实际上使用套接字调用。目前,我可能会切换到Twisted,但想知道是否可以改为超时。切换到Twisted只是为了超时是很遗憾的

我认为thread的stop函数被贬低了,有利于中断线程并自己处理对线程的杀戮。扼杀一根线并不是一个坏习惯。

@皮佩普:你是怎么自杀的?

@zaharpoov只返回线程的run函数。

同上,@无用,完全取决于你想做什么。

一个完全通用的解决方案,真的,真的不存在。对于给定的域,必须使用正确的解决方案。

如果你想让你完全控制的代码超时,你必须写它来合作。这种代码必须能够以某种方式分解成小块,比如在事件驱动系统中。如果您可以确保没有什么东西能将锁保持太长时间,那么您也可以通过线程来实现这一点,但正确处理锁实际上相当困难。

如果您因为担心代码失控而需要超时(例如,如果您担心用户会要求计算器计算9**(9**9)),则需要在另一个进程中运行它。这是唯一能够充分隔离它的简单方法。在事件系统或其他线程中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值