螺纹扭曲...如何正确使用它们?

2024-03-08

我需要编写一个运行两个线程的简单应用程序: - 线程 1:按定时运行,假设每 1 分钟运行一次 - 线程 2:只是一个执行“操作”的“正常”while True 循环

如果不是按定时间隔运行的要求,我根本不会考虑扭曲,但简单的 sleep(60) 还不够好,构造如下:

l = task.LoopingCall(timed_thread)
l.start(60.0)
reactor.run()

看起来很简单就能实现我想要的目标。

现在,我如何“正确”添加另一个线程?

我在这里看到两个选择:

  • 使用线程库并运行两个“python 线程”,一个执行我的 while 循环,另一个运行reactor.run()。但谷歌似乎反对这种方法并建议使用扭曲线程
  • 使用绞线。这就是我尝试过的,但不知怎的,这对我来说看起来有点笨拙。

这是我想出的:

def timed_thread():
    print 'i will be called every 1 minute'
    return

def normal_thread():
    print 'this is a normal thread'
    time.sleep(30)
    return

l = task.LoopingCall(timed_thread)
l.start(60.0)
reactor.callInThread(normal_thread)
reactor.run()

这似乎有效,但是!我无法停止该应用程序。如果我按 ^C 它不会执行任何操作(如果没有“callInThread”,它只会像您期望的那样停止)。 ^Z 轰炸到 shell,如果我然后执行“kill %1”,它似乎会杀死该进程(shell 报告这一点),但“正常”线程继续运行。 kill PID 并不能消除它,唯一的解决办法是kill -9。真的很奇怪。

所以。我究竟做错了什么?在twisted中实现两个线程是正确的方法吗?我不应该为扭曲而烦恼吗?还有哪些其他“标准”替代方案可以实现定时调用? (“标准”我的意思是我可以 easy_install 或 yum 安装它们,我不想开始从随机网页下载和使用一些随机脚本)。


您没有解释为什么这里实际上需要线程。如果你有的话,我也许能够解释为什么你don't需要他们。 ;)

除此之外,我可以确认你对事物的基本理解是正确的。不过,我可以澄清的一个可能的误解是“python 线程”和“Twisted 线程”完全不同的概念。他们不是。 Python提供了一个线程库。 Twisted 的所有线程 API 都是根据 Python 线程库实现的。只是API不同。

就关闭而言,您有两种选择。

  • 直接使用 Python 的线程 API 启动永远运行的线程,并使该线程成为守护进程。即使守护线程仍在运行,您的进程也可以退出。此解决方案可能存在的问题是,某些版本的 Python 存在守护线程问题,这会导致关闭时崩溃。
  • 使用 Twisted 的 API 或 stdlib 线程 API 创建线程,还可以使用以下命令添加 Twisted 关闭挂钩reactor.addSystemEventTrigger('before', 'shutdown', f)。在该钩子中,与工作线程通信并告诉它关闭。例如,您可以共享一个threading.Event在扭曲线和工作线之间并有钩子set它。工作线程可以定期检查它是否已设置,并在发现已设置时退出。除了不崩溃之外,这还比守护线程有另一个优势 - 它允许您在进程退出之前在工作线程中运行一些清理或终结代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

螺纹扭曲...如何正确使用它们? 的相关文章

随机推荐

  • String 和 Char 类型在 .NET 中如何存储在内存中?

    我需要存储一个语言代码字符串 例如 en 它始终包含 2 个字符 将类型定义为 String 还是 Char 更好 private string languageCode vs private char languageCode 或者还有其
  • 在网络应用程序中显示文件类型图标?

    在桌面应用程序中 您通常可以获取特定文件类型的底层操作系统图标并将其显示给用户 在网络应用程序中 我无法使用此类功能 因此看起来我可能需要提供自己的图标集 有谁知道有哪些针对常见图标类型的经过良好许可的免费图标集 我找到了一个github上
  • 处理 AJAX 请求上的 SAML 重定向

    我有几个 AngularJS 应用程序 全部使用 Spring Java 和 SAML 2 0 进行 SSO 利用 Spring Security SAML 扩展 我的 SSO ID 提供商是 OpenAM 一切运行良好 但是 我遇到了一种
  • 是否应该将依赖项注入比需要的更多“级别”?

    我正在使用 SOLID 原则编写 C ASP NET MVC Web 应用程序 我写了一个ViewModelService 这取决于AccountService and a RepositoryService 所以我将这两个服务注入到Vie
  • numpy 数组的缓存装饰器

    我正在尝试为具有 numpy 数组输入参数的函数制作一个缓存装饰器 from functools import lru cache import numpy as np from time import sleep a np array 1
  • 如何将自定义包添加到 Dymola/Modelica 的启动路径中?

    我有一个自定义包 我发现自己在 Dymola 模型中重复使用该包 并且我想将此包放在一个公共目录中 每当我启动 Dymola 时都会自动加载该目录 我当前的策略是在加载我正在处理的模型时加载自定义包 然后保存总计 这并不优雅 因为自定义包的
  • 如何将轴移动到图表中心?

    我需要在原点位于屏幕中心 或中心附近的某个位置 但不一定在中心 的坐标系上绘制一个函数 并且我需要绘制轴 以便它们在原点交叉 轴也应该有标签和抽动以及箭头 我不知道如何有效地做到这一点 到目前为止 在我的代码中 我手动设置了抽动的偏移量 并
  • phpMyAdmin 抛出 #2002 无法登录 mysql 服务器 phpmyadmin

    我已经在本地计算机上安装了MySQL服务器企业版5 1 现在我想安装phpMyAdmin 但它不起作用 我已将 phpMyAdmin 解压到我的服务器根目录并浏览到 localhost phpMyAdmin setup index php
  • 如何使用 wkhtmltopdf 在页眉/页脚 html 中进行页码编号?

    我正在开发一个电子发票系统 我们的功能之一是生成发票的 PDF 并邮寄它们 我们有多个发票模板 稍后还会创建更多模板 因此我们决定使用 HTML 模板 生成 HTML 文档 然后将其转换为 PDF 但我们面临着 wkhtmltopdf 的一
  • ios 标签栏自定义图像

    我在工作ios我需要定制的应用程序tabbar像是this http postimage org image jxm57t89j 首先我创建了5个viewcontrollers导航控制器中的每一个 然后把它们放进去tabbbarcontro
  • Symfony onFlush Doctrine 监听器

    嗨 我有一个 onFlush 监听器
  • 在新窗口中打开图像

    如何使用其在新窗口中打开图像id function swipe var largeImage document getElementById largeImage largeImage style display block largeIm
  • 更改Android自定义SurfaceView的大小

    我正在尝试为 Android 应用程序创建 2D 游戏引擎 我已经关注了本教程 http www droidnova com 2d tutorial series part ii 772 html 这对于创建全屏显示效果很好 但我不想要这样
  • servicestack ormlite 中的分页

    我正在寻找一种在 ormlite 中实现分页的好方法 我发现了另一种question https stackoverflow com questions 15705419 passing params expression results
  • 从 Intent.createChooser 获取选择的应用程序

    我正在尝试捕捉结果Intent createChooser了解用户选择共享哪个应用程序 我知道有很多与此相关的帖子 如何知道用户在使用意图选择器时选择了哪个应用程序 https stackoverflow com questions 106
  • Filemaker GetAs...如何在网页上显示容器字段?

    我有一个 ASP Net 应用程序 需要显示存储在 Filemaker 容器字段中的图像 我的查询语句如下所示 SELECT GetAs Image JPG FROM UA Item Pictures WHERE Stock Number
  • PyGame Space Invaders 游戏 - 让外星人一起移动

    我已经使用 PyGame 模块在 Python 中创建了一个 Space Invaders 克隆 但是当它们到达游戏屏幕边缘时 让它们一起向下移动时遇到了一些困难 当外星人到达游戏屏幕边缘时 我该如何做到这一点 他们都同时改变方向并下降一个
  • 多对一,全部删除孤儿,将属性设置为 null 但实体未删除

    使用 NHibernate v3 0 我有一个与此类似的课程 class Foo bool barActive Bar bar Bar 实例完全由 Foo 内部管理 当 barActive 为 true 时 bar 被设置为 Bar 实例
  • makePrimss 的用例和示例

    我不清楚 makeLense 和 makePrisms 之间的区别 我知道当我们想要访问嵌套结构 数据时 请像这样使用 makeLense data Point Point x Int y Int data Test Test name S
  • 螺纹扭曲...如何正确使用它们?

    我需要编写一个运行两个线程的简单应用程序 线程 1 按定时运行 假设每 1 分钟运行一次 线程 2 只是一个执行 操作 的 正常 while True 循环 如果不是按定时间隔运行的要求 我根本不会考虑扭曲 但简单的 sleep 60 还不