Python 等待队列和事件

2024-01-11

我有一个队列和一个事件。我想在事件设置为 True 时退出循环,但是循环中有一个queue.get(),它会阻塞,直到其中有东西为止。

当设置 closeEvent 事件标志时,如何中止 self._commandQueue.get() 的等待?

注意:我想避免依赖于队列的阻塞性质,并希望根据队列的条件和事件标志进行阻塞

def _execute(self):
    while not self._closeEvent.isSet():
        nextCommand = self._commandQueue.get()
        self._commandExecutor.execute(nextCommand)
        self._commandQueue.task_done()

你需要像Windows这样的东西WaitForMultipleObjects()调用,但 python 事件和队列 API 不提供这样的野兽(但如果你是严格的 Windows,你可以使用 win32api 来使用它),所以如果你真的需要并行检查两个事件源,答案是'如果没有轮询(或者猴子修补事件类以允许它),你就不能”。

但如果你更灵活一点,你可以通过稍微重新定义你的命令队列来安排类似的事情。如果命令队列是PriorityQueue,一旦事件发出信号,您可以将正常作业以正常优先级排队,并让额外的进程以更高优先级排队“停止”令牌。

STOP = None

def _execute(self):
    while 1:
        nextCommand = self._commandQueue.get()[1]
        if nextCommand is STOP:
           break
        self._commandExecutor.execute(nextCommand)
        self._commandQueue.task_done()

def wait_for_stop_signal(self):
    self._closeEvent.wait()
    self._commandQueue.put((-1, STOP))

现在你跑wait_for_stop_signal在它自己的线程中,并且您有您想要的行为(但浪费一个线程而不是轮询,选择对您的用例来说更糟糕的)。

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

Python 等待队列和事件 的相关文章

  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • 如何可靠地判断 boost 线程是否已退出其 run 方法?

    我以为 joinable 会表明这一点 但事实似乎并非如此 在工人阶级中 我试图表明它仍在通过谓词进行处理 bool isRunning return thread gt joinable 已经退出的线程不是不能加入吗 我错过了什么 boo
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • Python 在 chroot 中运行时出现错误

    我尝试在 chroot 中运行一些 Python 程序 但出现以下错误 Could not find platform independent libraries
  • Python 中的安全解除引用

    Groovy 有一个很好的安全取消引用运算符 这有助于避免 NullPointerExceptions variable method The method仅当以下情况时才会被调用variable is not null 有没有办法在 Py
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • 为 Networkx 图添加标题?

    我希望我的代码创建一个带有标题的图 使用下面的代码 可以创建绘图 但没有标题 有人可以告诉我我做错了什么吗 import pandas as pd import networkx as nx from networkx algorithms
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何使用 Python 多处理避免在分叉进程中加载​​父模块

    当您创建一个Pool使用Python的进程multiprocessing 这些进程将分叉 父进程中的全局变量将显示在子进程中 如下面的问题所述 如何限制多处理进程的范围 https stackoverflow com questions 2
  • 在 matplotlib 中使用 yscale('log') 时缺少误差线

    在某些情况下 当使用对数刻度时 matplotlib 会错误地显示带有误差条的图 假设这些数据 例如在 pylab 内 s 19 0 20 0 21 0 22 0 24 0 v 36 5 66 814250000000001 130 177
  • 为什么“return self”返回 None ? [复制]

    这个问题在这里已经有答案了 我正在尝试获取链的顶部节点getTopParent 当我打印出来时self name 它确实打印出了父实例的名称 然而 当我回来时self 它返回 None 为什么是这样 class A def init sel
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • 为什么 bot.get_channel() 会产生 NoneType?

    我正在制作一个 Discord 机器人来处理公告命令 当使用该命令时 我希望机器人在特定通道中发送一条消息 并向用户发送一条消息以表明该命令已发送 但是 我无法将消息发送到频道 我尝试了这段代码 import discord import
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • Web 应用程序似乎启动了名为 [22] 的线程,但未能停止它。这很可能造成内存泄漏

    我有一个 Web 应用程序 后端有 Servlet 部署在 tomcat 上 该应用程序是简单的java应用程序 我经常在服务器日志中看到此错误 严重 Web 应用程序似乎启动了一个名为 22 但未能阻止它 这很有可能 造成内存泄漏 是否存
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D

随机推荐

  • 相邻邻居求和[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如果给我数字 1 2 1 并且我想找到每个数字与其相邻邻居 在环中 重复多次的总和 我可以使用以下公式 base case x 1 y 2 z 1 r
  • 使用角度组件会破坏材质布局

    在 index html 中包含以下内容和一个简单的 ui 路由器状态 该状态将组件加载为模板 div class container div 使用存储在文件中的以下模板定义的组件
  • react-native-webview Typescript 错误:“WebView”无法用作 JSX 组件

    我正在尝试使用 Expo 和 TypeScript 来设置一个简单的 React Native 应用程序 以显示 WebView 我的App tsx文件包含以下内容 import Constants from expo constants
  • 玩!框架 - 创建简单的 html 链接

    我有一个使用多个 HTML 文件和一个 CSS 文件制作的网站 我目前正在尝试切换到 Play 斯卡拉框架 由于某种原因 我很难弄清楚如何将一个 html 页面链接到另一个页面 现在 我的所有 html 文件都保存在 views 文件夹中
  • 我在哪里可以购买 .app TLD? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以购买 app 顶级域名 TLD 我去了 Network Solutions GoDaddy 等
  • Nexus 支持批量上传工件吗?

    我想知道我们是否可以将工件批量上传到 Nexus 的存储库中 您可以通过多种方式做到这一点 使用 Nexus工件上传页面 http www sonatype com books nexus book reference ch04s05 ht
  • 触发器:插入的表如何工作?如何访问它的行?

    我有下表 Data Table name ID Identity column PCode Postal Code 我创建了以下触发器 CREATE TRIGGER Trig ON Data FOR INSERT AS BEGIN Sele
  • 为什么我的指令抛出“Error: $injector:unpr Unknown Provider”

    我正在努力将我的控制器 工厂和指令重构为推荐的Angular 风格指南 https github com johnpapa angular styleguide file templates and snippets for 角度片段 ht
  • .NETBeans + 请求范围 - 有可能吗?

    我有我的网络应用程序 我需要 当用户执行请求 我的意思是 调用页面 时 创建一个对象 该对象为每个请求 因此数据在每个请求时更新 和每个用户存储一些信息 它从数据库获取这些信息 所以UserA 与 UserB 不共享相同的对象 我曾经使用
  • 使用 Word 时出现运行时错误 462 Excel VBA

    第二次或第三次运行此循环时 我不断收到 462 错误 我不认为我有任何漂浮的物体 但也许我错过了一些东西 我对此有点陌生 该宏将从 Excel 中获取所有图表 将它们作为图片粘贴到 Word 中 调整它们的大小 保存文档并关闭它 For 循
  • PHP/JS - 动态创建缩略图或存储为文件

    对于图像托管 Web 应用程序 对于我存储的图像 是否可以使用 PHP 或其他方式 动态创建缩略图 或者我应该将 1 个或多个不同大小的缩略图保存到磁盘并加载它们 任何帮助表示赞赏 将缩略图保存到磁盘 图像处理需要大量资源 并且根据图像的大
  • 使用 fread 导入 csv 时出现“字符串中嵌入 nul”错误

    我有一个大文件 3 5G 我试图使用它导入data table fread 它最初是从一个 rpt 文件创建的 该文件以文本形式打开并保存为 CSV 这对于较小的文件 相同类型的数据 相同的列等 效果很好 这只是为了更长的时间范围和更广泛的
  • Chrome、Opera 和 Safari 中 Flash 下弹出弹出菜单

    我在以下位置创建了一个弹出导航菜单 http lixmebel com http lixmebel com gt 在 gt 下 在 Firefox 和 Internet Explorer 中 一切正常 菜单会在 Flash 上弹出 但在 C
  • kafka-console-consumer 自定义反序列化器

    我想使用我的自定义value deserializer使用 kafka console consumer 命令行工具时 像这样的事情 kafka console consumer bootstrap server kafka2 29092
  • 当只有其中之一进行类型检查时,为什么这两个隐式都匹配?

    我正在尝试诊断由不同的隐式扩展错误引起的编译器错误 这是我所看到的 scala Welcome to Scala 2 13 1 OpenJDK 64 Bit Server VM Java 1 8 0 252 Type in expressi
  • 如何循环空手道响应数组并将其传递到另一个 Web 服务响应的 json 路径中

    我正在使用空手道版本 0 8 0 1 我想执行以下步骤来测试一些响应 我做了一个获取网络服务 1 使用 jsonpath 从 Web 服务 1 的响应中查找货币值 currencies 第 2 步给出了以下结果 USD HKD SGD IN
  • 当结果具有相同分数时在 Azure 搜索中进行分页

    我在电子商务网站上使用 Azure 搜索 现在在搜索页面上遇到分页问题 当我重新加载搜索页面时 我可以获得不同的产品顺序 因此 当我使用分页时 我可以在不同页面上看到相同的产品 这一点至关重要 我开始研究出了什么问题 我在 Microsof
  • 从 cakephp 的数组中删除数组键

    打印数组 array Order gt array id gt 1 base price gt 65 min price gt 95 检索数据时是否可以删除键 Order 如果不是 我如何使用 array shift 或以一行结束并防止出现
  • Haskell 中类型安全的“read”

    向你学习 Haskell http learnyouahaskell com making our own types and typeclasses讨论以下数据类型 data Day Monday Tuesday Wednesday Th
  • Python 等待队列和事件

    我有一个队列和一个事件 我想在事件设置为 True 时退出循环 但是循环中有一个queue get 它会阻塞 直到其中有东西为止 当设置 closeEvent 事件标志时 如何中止 self commandQueue get 的等待 注意