如何在不使用 join 的情况下向 python 中的主线程发送信号?

2023-11-21

我试图在多线程程序中从子线程向主线程发送信号(不能使用多进程)。不幸的是,即使在用尽了所有在线阅读材料(我可以找到)之后,我仍无法清楚地知道如何做到这一点。我是信号和Python的初学者,所以请耐心听我解释,就像向新手解释一样。 我无法在进程中使用 join 方法,因为我希望两个线程同时运行。 这是我发现与此处主题相关的代码 -http://pymotw.com/2/signal/#signals-and-threads这对我来说并不起作用。

import signal
import threading
import os
import time

def signal_handler(num, stack):
    print 'Received signal %d in %s' % (num, threading.currentThread())

signal.signal(signal.SIGUSR1, signal_handler)

def wait_for_signal():
    print 'Waiting for signal in', threading.currentThread()
    signal.pause()
    print 'Done waiting'

# Start a thread that will not receive the signal
receiver = threading.Thread(target=wait_for_signal, name='receiver')
receiver.start()
time.sleep(0.1)

def send_signal():
    print 'Sending signal in', threading.currentThread()
    os.kill(os.getpid(), signal.SIGUSR1)

sender = threading.Thread(target=send_signal, name='sender')
sender.start()
sender.join()

# Wait for the thread to see the signal (not going to happen!)
print 'Waiting for', receiver
signal.alarm(2)
receiver.join()

如果可能,请用多线程示例进行解释。 提前致谢!


信号和线程真的、真的不能很好地结合在一起。

考虑使用Event或其他同步机制。以下示例创建一个“事件”对象,然后将其传递给两个线程。一个等待两秒钟,然后示意另一个打印一条消息,然后退出。

source

import threading, time

def flagger_thread(event):
    """
    wait for two seconds, then make 'event' fire
    """
    time.sleep(2)
    event.set()

def waiter_thread(event):
    print("Waiting for event")
    if event.wait(5):
        print("event set.")
    else:
        print("Timed out.")

stop_event = threading.Event()
threading.Thread(target=flagger_thread, args=[stop_event]).start()
threading.Thread(target=waiter_thread, args=[stop_event]).start()

# wait for all threads to exit
for t in threading.enumerate():
    if t != threading.current_thread():
        t.join()

output

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

如何在不使用 join 的情况下向 python 中的主线程发送信号? 的相关文章

  • 如何捕获 Runnable 中的封闭范围

    我正在尝试对 a 进行一系列更新HandlerThread使用下面的类 但我有几个关于变量捕获在 Java 中如何工作的问题 1 Is ret通过引用从封闭范围捕获 2 Does this参考Runnable 或者是从封闭范围捕获的 bon
  • 当Java中set已经是原子的时候,为什么我们还需要compareAndSet呢?

    因为原子意味着线程安全 当 set 本身在java中是原子和线程安全的时候 我们什么时候使用compareAndSet 举例来说 我想以原子方式设置一个变量 以便每个其他线程都可以看到它 但我希望以线程安全的方式设置该变量 我可以简单地将其
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • 无法使用Python请求会话模块登录网站

    我刚刚开始进行网络抓取 对于我的第一个项目 我尝试使用 requests Session 登录 artofproblemsolving com 并访问另一个用户的帐户 这是我的代码 import requests LOGIN URL htt
  • 尝试 numba 时出现巨大错误

    我在使用 numba 时遇到了大量错误 讽刺的是 正确的结果是在错误之后打印的 我正在使用最新的 Anaconda python 并安装了 numba conda install numba 一次在 Ubuntu 13 64 位和 anac
  • 如何在不同的目录中执行python脚本?

    Solved对于可能觉得这有帮助的人 请参阅下面我的答案 我有两个脚本 a py 和 b py 在我当前的目录 C Users MyName Desktop MAIN 中 我运行 gt python a py 第一个脚本 a py 在我当前
  • 如何将非并行junit参数化测试转变为并行运行

    我编写了一个参数化的junit测试 有没有任何内置方法可以使其并行运行 任何 annoation例如 如果没有 我唯一的方法就是手动编写 你会如何管理junit java中的线程池 图书馆JUnit工具箱 https github com
  • 多线程进程的线程ID可以与另一个正在运行的进程的进程ID相同吗?

    我正在尝试找到一种方法来唯一标识多进程环境中的线程 我有一个服务器 它跟踪连接到它的不同进程 其中一些是多线程的 一些不是 为了识别多线程连接中的线程 我使用线程 ID 作为唯一标识符 在任何给定时间最多有 1 个多线程进程连接 我的问题是
  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 如何指定一个变量作为类或类实例的成员变量?

    在最新的 Python 2 7 x 中 给定类定义内的任何成员变量 该成员变量是否始终处于类级别 因为它是由该类的所有实例共享的单个变量 在类的定义中 如何指定 类定义中的哪些成员变量属于该类 因此由该类的所有实例共享 以及 哪些属于该类的
  • 如何将 PyTTSx 的输出保存到 wav 文件

    我正在尝试找到为什么我的代码无法正常工作的解决方案 我使用的解决方案来自在 Python 中将合成的文本转语音记录到文件中 https stackoverflow com questions 9900137 recording synthe
  • 使用 std::mutex 实现类的交换

    假设我们有一个class with a std mutex class Foo std mutex mutex std string str other members etc public friend void swap Foo lhs
  • Spring MVC 应用程序可以是多线程的,即使它的 servlet 不是吗?

    当您谈论 Spring 应用程序是多线程时 您是否一定是指该应用程序中定义的 servlet 是否是多线程的 或者即使应用程序中的 servlet 不是多线程 Spring 应用程序也可以配置为多线程吗 不再支持单线程 servlet 它们
  • 如何使网页在 python selenium 中加载时完全显示?

    我的主要目标是阅读网页中的表格并解释它所具有的总元素 但是因为你必须向下滚动才能找到其他不被这句话 追赶 的元素 table css driver find elements by id DeletButtn 然后我决定放大到 30 以捕捉
  • 使用 Python 导入包含文本和数字数据的文件

    I have a txt file which has text data and numerical data The first two rows of the file have essential information in te
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • PhotoImage 实例没有属性“调整大小”

    我收到错误 PhotoImage 实例没有属性 调整大小 尽管多个在线资源声称这是使用 PIL 调整图像大小的方法 有任何想法吗 相关代码 Deathwing ImageTk PhotoImage Image open Deathwing
  • 在哪里停止使用 async /await 关键字?

    我的 DB2 400 有一个简单的心跳方法 public bool CheckConnection try using OleDbConnection db new OleDbConnection this conString OleDbC
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare

随机推荐