如何为复杂的计算设置超时?

2023-12-01

我正在写一个像这样的程序

results = []
for i in range(30):
    x = 4 ** 5 ** i
    results.append(x)

然而,当i变得更大(结果并没有太大而无法提高)OverflowError),这将需要一个long计算结果的时间。所以我想设置一个timeout机械师将continue如果计算时间超过例如 1 秒。

我尝试使用eventlet包状

from eventlet import Timeout
with Timeout(1) as timeout:
    x = 4 ** 5 ** 20

But the timeout不管用。 (也许只是因为我只执行一行代码。)我从 StackOverflow 找到的其他方法也失败了......

是否有可能的编程方法来为这种“简单但复杂”的计算设置超时?或者,还有其他方法吗? (例如,当结果太大时退出...)

感谢您的帮助!


首先,尝试使用eventlet因为这是错误的工具。eventlet主要用于使用 greenlet 形式的协程的非阻塞 I/O。它与 CPU 限制问题没有什么关系(事实上,文档eventlet.Timeout read):

如果 try/finally 或 with-block 中的代码块从未协同产生,则无法引发超时。在 Eventlet 中,这很少会成为问题,但请注意,您不能使用此类使仅 CPU 操作超时。

这意味着,如果您有一些代码块正在执行 CPU 密集型操作,您仍然无法摆脱它,因为该代码永远不会屈服于另一个线程。这更适用于您可能有一些代码的情况,例如检查套接字是否有要读取的数据,如果没有则产生。

如果你想在一段时间后设置一个中断来中断长时间运行的计算,你可以使用signal.alarm并设置一个SIGALRM处理程序。您可以将这一切包装在上下文管理器中,例如:

>>> import signal
>>> from contextlib import contextmanager
>>> class TimeoutError(RuntimeError): pass
...
>>> @contextmanager
... def timeout(seconds):
...     def handler(*args):
...         raise TimeoutError("timed out after {} seconds".format(seconds))
...     orig_handler = signal.signal(signal.SIGALRM, handler)
...     signal.alarm(seconds)
...     try:
...         yield
...     finally:
...         signal.alarm(0)
...         signal.signal(signal.SIGALRM, orig_handler)
...
>>> with timeout(10):
...     while True: pass
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 4, in handler
__main__.TimeoutError: timed out after 10 seconds
>>> with timeout(10):
...     print(1 + 1)
...
2
>>> with timeout(10):
...     4 ** 5 ** 20
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 4, in handler
__main__.TimeoutError: timed out after 10 seconds

Note:这仅适用于 *NIX 系统,尽管也有方法可以在 Windows 上执行此操作。

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

如何为复杂的计算设置超时? 的相关文章

  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 即使构建步骤失败,如何继续 Jenkins 构建?

    我正在 Jenkins 中使用 Phing 构建脚本 并希望在作业中端到端运行它并捕获所有报告 问题是它停止在失败的构建步骤上进行构建 有没有一种方法或插件即使失败也能继续工作 Thanks 我对 Phing 不太了解 但是 由于它基于 A
  • 用于验证 Outlook 全局地址列表中找到的电子邮件地址的 VBA 代码

    问题描述 在将电子邮件发送到 Excel 中的可用 Outlook 电子邮件帐户列表之前 删除全局地址列表中未找到的非活动 非现有 电子邮件帐户 解决方案 运行 sql 查询从数据库中获取用户名或用户电子邮件 ID 步骤1 查询1 strS
  • 使用 nservicebus 延迟消息

    我正在处理 nServiceBus 我想在失败时重试并在另一时间发送一条消息 我听说过 Bus Defer 但我对它的理解有限 我有一个检查股票代码的系统 它会检查命令何时被调用 并在晚上 8 点之后重新安排另一次检查 我有 CheckCu
  • 如何使用 dplyr 过滤数据而不丢失 NA 行

    如何在 R 中对数据进行子集化而不丢失 NA 行 上面的帖子使用逻辑索引的子集 有没有办法在 dplyr 中做到这一点 Also dplyr什么时候自动删除NA 根据我的经验 当我过滤掉特定字符串时 它会删除 NA 例如 b a gt fi
  • LittleMonkey QRScanner 库构建问题

    我使用过littleMonkey QRScanner 库 但它可以在模拟器中工作 显示扫描仪不支持对话框 但是当我构建项目时它给出了构建错误 PS 我已经删除了所有构建提示并再次刷新库 但仍然存在同样的问题 我按照建议保留了 cn1 cod
  • 应用内结算,无法使 RESULT_DEVELOPER_ERROR 消失

    我正在尝试在 Android 上进行应用内计费 但 在尝试初始化事务时不断获得以下 logcat 输出 from logcat BillingService Billing service connected CheckBillingSup
  • python 正则表达式不匹配序列

    我需要用 HTML 标签包装一些 MathJax 字符串 我想知道如何排除 从搜索字符串不匹配完整字符串 使用单个字符很容易 例如 但是当我需要做同样的事情时该怎么办 例如两个字符相继出现 search str ce sigma s b H
  • scala 不明确支持依赖类型的任何原因?

    有路径依赖类型 我认为在 Scala 中可以表达 Epigram 或 Agda 等语言的几乎所有功能 但我想知道为什么 Scala 不支持this更明确地说 它在其他领域 例如 DSL 做得很好 我错过了什么 比如 没有必要 吗 除了语法便
  • 根据选择将 JSON 数据输入 Spinner

    Data is coming form JSON RESPONSE In JSON Every Tag contains number of nodes Relevant data into second spinner is based
  • 如何更改 Google 本机文档中的元数据语言

    我可以使用 API Drive 2 0 将本机 Google 文档创建到 Google Drive 但是 我无法更改语言正文文档 我认为 TargetLanguage 和 SourceLanguage 属性有其他目标 并且它们不允许在 SD
  • 如何发送数组作为 (jquery) ajax 请求的一部分

    我尝试发送一个数组作为 ajax 请求的一部分 如下所示 var query in between I add some values to query ajax url MyServlet data query dataType json
  • 使用 null 的方法重载选择

    鉴于此代码 class Overloading extends Object static public void target Object val String chk System out println Object val Sho
  • Joomla 错误:“非法变量 _files 或 _env 或 _get 或 _post 或 _cookie 或 _server 或 _session 或全局变量传递给脚本”

    我在 Joomla 中收到此错误 Illegal variable files or env or get or post or cookie or server or session or globals passed to script
  • 按元组的指定元素对具有元组键的字典进行排序

    我有一个字典列表 字典键是元组 例如 0 5 我想按元组的值对列表进行排序 1 我尝试使用方法列表排序的关键参数 但我不知道要在 lambda 中放入什么 我尝试这样做 key lambda k 1 输入示例 5 9 item 0 4 it
  • JTextField 时间(HH:mm:ss)

    我有一个浮动的特定任务所需的估计时间 以分钟为单位 如何将其放入 JFormattedTextField 中 格式为HH mm ss 对于 Calendar and DateFormat float minutes 100 5f 1 40
  • 如何在Python中使用联合类型? [复制]

    这个问题在这里已经有答案了 我找到了以下代码 def get iterator from config config dict data dict iterator config config dataset iterator iterat
  • Solrj 从 Android 索引文档

    我正在尝试使用 Android 应用程序中的 Solrj 来索引文档 但它似乎不起作用 我关注这个LINK 这是我正在编写的代码 package com example secondapp import android app Activi
  • SQLite数据库错误,无用日志

    我发布了应用程序的更新 但从用户那里收到了大量错误 我无法重新创建它或查明问题 我收到两个错误 java lang IllegalStateException attempt to re open an already closed obj
  • Angular Router - 网址更改但视图未加载

    我刚刚开始调整示例角度 离子选项卡导航应用程序 但遇到了问题 当我点击一个视图中的链接 所有旅程的列表 时 我应该被带到一个屏幕 其中包含有关该特定旅程的详细信息 改编自示例应用程序中的 聊天 然而它并不完全有效 URL 更改为预期的 UR
  • 如何为复杂的计算设置超时?

    我正在写一个像这样的程序 results for i in range 30 x 4 5 i results append x 然而 当i变得更大 结果并没有太大而无法提高 OverflowError 这将需要一个long计算结果的时间 所