函数调用超时

2024-01-02

我正在 Python 中调用一个函数,我知道该函数可能会停止并迫使我重新启动脚本。

如何调用该函数或者将其包装在什么中,以便如果花费时间超过 5 秒,脚本就会取消该函数并执行其他操作?


您可以使用signal http://docs.python.org/library/signal.html如果您在 UNIX 上运行,请安装软件包:

In [1]: import signal

# Register an handler for the timeout
In [2]: def handler(signum, frame):
   ...:     print("Forever is over!")
   ...:     raise Exception("end of time")
   ...: 

# This function *may* run for an indetermined time...
In [3]: def loop_forever():
   ...:     import time
   ...:     while 1:
   ...:         print("sec")
   ...:         time.sleep(1)
   ...:         
   ...:         

# Register the signal function handler
In [4]: signal.signal(signal.SIGALRM, handler)
Out[4]: 0

# Define a timeout for your function
In [5]: signal.alarm(10)
Out[5]: 0

In [6]: try:
   ...:     loop_forever()
   ...: except Exception, exc: 
   ...:     print(exc)
   ....: 
sec
sec
sec
sec
sec
sec
sec
sec
Forever is over!
end of time

# Cancel the timer if the function returned before timeout
# (ok, mine won't but yours maybe will :)
In [7]: signal.alarm(0)
Out[7]: 0

通话后 10 秒signal.alarm(10),处理程序被调用。这会引发一个异常,您可以从常规 Python 代码中拦截该异常。

该模块不能很好地与线程配合使用(但是,谁能配合呢?)

注意由于我们在发生超时时引发异常,因此它最终可能会在函数内部被捕获并忽略,例如这样一个函数:

def loop_forever():
    while 1:
        print('sec')
        try:
            time.sleep(10)
        except:
            continue
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数调用超时 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 您可以在 Python 类型注释中指定方差吗?

    你能发现下面代码中的错误吗 米皮不能 from typing import Dict Any def add items d Dict str Any gt None d foo 5 d Dict str str add items d f
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 在 data.table 中创建新列[重复]

    这个问题在这里已经有答案了 我在 R 的 data table 中有几个名为 A1 A2 A3 A50 的列 字面意思 不幸的是 我的表中的列不是按字母顺序排列的 我想创建一个名为 sumA 的新列 其中包含 A1 A2 A50 有什么简单
  • 如何在 Rust 中操作二进制数?

    我如何在 Rust 中处理和执行数学运算 例如添加或除两个二进制数 在Python中 有像这样的东西 https kite com python answers how to add two binary numbers in python
  • 升级到 Rails 6.1.6.1 会导致 Psych::DisallowedClass: 尝试加载未指定的类: Symbol

    升级到 Rails 6 1 6 1 时 我开始在应用程序中收到以下错误 Psych DisallowedClass Tried to load unspecified class Symbol 这是由于使用HashActiveRecord
  • Inno Setup:如何将安装程序本身放入已安装的程序中

    我在 Inno Setup 上有一个安装程序的安装程序 该安装程序有多种形式供用户输入 但是 如果用户没有输入适当的信息 我想给他重新单击安装程序并输入适当信息的选项 我试图像这样实现这一目标 Files Source C Users my
  • PhoneGap 缺少 plist.key

    当我尝试将我的 iTunes 应用程序安装程序加载到 iTunes 时 我缓解了此错误 缺少 Info plist 密钥 此应用程序尝试访问隐私敏感信息 没有使用说明的数据 应用程序的 Info plist 必须包含 NSPhotoLibr
  • Firestore 查询操作字符串如何处理不同的数据类型?

    如何火库 https firebase google com docs firestore opStr 操作字符串 中where https firebase google com docs reference js firebase fi
  • Integrate.nquad 的集成错误很大

    首先 我在椭圆上集成一个简单的函数 其次 我集成了相同的函数 并为其添加了常量值 正如您在我的消息底部看到的那样 结果并不一致 预先感谢您的帮助 coding utf 8 from scipy import integrate from m
  • 如何使用 C# 验证字符串不包含 HTML

    有没有人有一种简单 有效的方法来检查字符串不包含 HTML 基本上 我想检查某些字段是否只包含纯文本 我考虑过寻找 XElement Parse
  • SQL Server“。”别名不起作用

    我添加了一个别名 它应该指向我的本地 命名 实例 SQL2008 但是当我尝试连接到 时 它超时了 我错过了什么还是这是不允许的 我尝试过的别名不起作用 设置为 32 位和 64 位 我也尝试将端口留空 如果您要创建 TCP IP 别名 则
  • 如何将 SSL 证书添加到 Dash 应用程序 [重复]

    这个问题在这里已经有答案了 如何使用 Python 为在 Web 服务器上运行的 DASH 应用程序启用 HTTPS 我已经有 SSL 证书 key 和 crt 如果 dash 是处理路由的 Web 服务器 而不是 Apache 或 Ngi
  • PHP 对象数组

    所以我一直在寻找一段时间 但找不到一个简单问题的答案 PHP 中是否可以有一个对象数组 例如 ar array ar Obj1 ar obj2 由于某种原因 我无法在任何地方找到答案 我认为这是可能的 但我只需要确定一下 寻找诸如此类的一般
  • 如何更改facet_wrap中的facet标签

    我正在使用 ggplot 和facet wrap 来获取所需的绘图 我必须向每个方面的标签或变量或每个方面的名称添加一些内容 就像我们直接在 ggplot 下修改 xlab 和 ylab 一样 Example d lt ggplot dia
  • 带有 objectselect 表单的 Doctrine 自定义存储库

    这个问题是一个可能的解决方案ZF2 Doctrine 与 objectSelect 获得多对多关系 https stackoverflow com questions 24017193 zf2 doctrine get manytomany
  • 什么是 switch 表达式以及它们与 switch 语句有何不同?

    作为 Java SE 12 的一部分 switch表达式 https docs oracle com en java javase 13 language switch expressions html被引入 并且自 Java SE 14
  • 如何用 Python 编写一系列 Promise?

    是否可以写出一个序列promise https developer mozilla org en docs Web JavaScript Reference Global Objects Promise 或任务 使用only Python
  • 如何在 Xcode 构建阶段运行 Grunt 任务?

    我正在开发一个 Web 应用程序 其中包括 GruntJS 构建任务 我在 Xcode IDE 中使用 Phonegap Cordova 进行部署 我想将 grunt 构建过程集成到我的 Xcode 项目中以简化项目的运行 理想情况下 Xc
  • Environment.SpecialFolder.ApplicationData 返回错误的文件夹

    我有一个奇怪的问题 我的 NET 4 0 WPF 应用程序正在将数据保存到 ApplicationData 文件夹 Environment GetFolderPath Environment SpecialFolder Applicatio
  • Log4J Swing Appender

    我需要将 log4j 内容附加到 Swing 组件 JTextArea 或类似组件 有一个通用的方法可以做到这一点吗 我最终没有引入外部库 而是编辑 log4j properties 文件以包含以下内容 log4j rootCategory
  • 对 HttpModule 中的事件进行单元测试

    我的应用程序中有一个 CustomHttp 模块 用于删除不需要的响应标头 如下所示 public class RemoveServerHeadersModule IHttpModule public void Init HttpAppli
  • 函数调用超时

    我正在 Python 中调用一个函数 我知道该函数可能会停止并迫使我重新启动脚本 如何调用该函数或者将其包装在什么中 以便如果花费时间超过 5 秒 脚本就会取消该函数并执行其他操作 您可以使用signal http docs python