gpt4 book ai didi

python - 在 Python 中运行一些超时代码的正确方法

转载 作者:IT老高 更新时间:2023-10-28 22:12:28 25 4
gpt4 key购买 nike

我在网上查找了一些 SO 讨论和 ActiveState 配方,用于运行一些超时的代码。看起来有一些常见的方法:

  • 使用运行代码的线程,并在超时的情况下加入。如果超时 - 杀死线程。这在 Python 中不直接支持(使用私有(private) _Thread__stop 函数),因此这是不好的做法
  • 使用 signal.SIGALRM - 但这种方法不适用于 Windows!
  • 使用超时的子进程 - 但这太重了 - 如果我想经常启动可中断的任务怎么办,我不想为每个进程触发!

那么,什么是正确的方法?我不是在问解决方法(例如使用 Twisted 和异步 IO),而是解决实际问题的实际方法——我有一些功能,我只想在超时的情况下运行它。如果超时,我想要控制权。我希望它可以在 Linux 和 Windows 上运行。

最佳答案

对此真的,老实说完全通用的解决方案不存在。您必须为给定的域使用正确的解决方案。

  • 如果你想要完全控制的代码超时,你必须编写它来配合。这样的代码必须能够以某种方式分解成小块,就像在事件驱动系统中一样。如果您可以确保没有任何东西持有锁太久,您也可以通过线程来做到这一点,但正确处理锁实际上非常困难。

  • 如果您因为担心代码失控而想要超时(例如,如果您担心用户会要求您的计算器计算 9**(9**9)),你需要在另一个进程中运行它。这是充分隔离它的唯一简单方法。在您的事件系统甚至不同的线程中运行它是不够的。也可以将事情分成类似于其他解决方案的小块,但需要非常小心处理并且通常不值得;无论如何,这不允许您执行与运行 Python 代码完全相同的操作。

关于python - 在 Python 中运行一些超时代码的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com