【问题标题】:Passing values between threads using queue module in Python在 Python 中使用队列模块在线程之间传递值
【发布时间】:2013-03-20 13:15:09
【问题描述】:

我正在寻找一种在 Python 中的多个线程之间传递值(例如整数、数组)的方法。我知道这个任务可以通过使用 Queue 模块来完成,但我对 python 或这个特定模块都不是很熟悉。

我有以下场景:每个线程需要根据自己的数据或其他线程的数据做一些计算。此外,每个线程都知道其他线程保存特定作业所需的数据(所有线程都有一个所有线程的数组,因此任何线程都知道对于任务 X,他需要从特定线程获取数据(行,列)从那个数组)。

如何使用 Queue 模块或其他技术来完成线程之间的通信(Queue 模块似乎是这项工作的正确选择)。 非常感谢任何帮助。非常感谢。

【问题讨论】:

    标签: python multithreading queue python-multithreading


    【解决方案1】:

    使用队列

    通常,队列用于具有一堆从队列中获取其工作的工作线程的场景。空闲线程正在队列中等待新作业放入其中。然后该作业由一个线程执行,而所有剩余的线程都在等待下一个作业。如果发布的作业多于可用线程,则队列开始填满。

    这不适用于您描述的场景。也许您可以直接读取数据而不将其放入队列中。如果你写在共享数据结构中,你可以考虑锁定策略。

    一般来说,您应该阅读并行编程。这些概念与语言完全无关。然后,您可以阅读有关 Python 线程的教程。互联网上有大量关于这两个主题的材料。

    编辑:

    使用 threading.Event 进行线程间通信

    两个线程之间最简单的通信方式是threading.Event。该事件可以设置为真或假。通常,一个线程正在设置事件,另一个线程检查事件的值并采取相应的行动。例如,该事件可能表明有新的事情要做。指示线程首先填充即将到来的任务所需的数据结构,然后将事件设置为真。在事件为真后,另一个等待事件的线程被激活。随后,它读取数据结构并执行任务。

    【讨论】:

    • 你能想到一个线程如何通知另一个特定线程它需要某些东西吗?线程和另一个特定线程之间的通信方式?谢谢
    • 有很多方法可以实现这一点(您甚至可以(错误)使用队列)。我会选择一个简单的 threading.Event 并且仅在绝对必要时使其更复杂。
    • 是否有可能做类似的事情:询问线程为他想要数据的不同线程初始化不同的事件(如果他想要来自线程(row,col)的数据,他会创建一个事件)。并且每个线程在其 run 方法中处理 event。每个线程可以有一个row、col属性,可以在每个线程的init方法中设置。我不是很连贯,对不起
    • @biggdman 这在技术上听起来是可行的。但也许你想在实现你的想法之前亲自咨询另一个程序员。鉴于您项目的信息有限,在这里很难给出正确的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2022-01-20
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多