python - 在 Python 中使用队列模块在线程之间传递值

标签 python multithreading queue python-multithreading

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

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

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

最佳答案

使用队列

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

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

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

编辑:

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

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

关于python - 在 Python 中使用队列模块在线程之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524627/

相关文章:

python - 如何使用 selenium 模仿手动方法单击网页中的复选框?

python - 针对 Windows 计算机使用 impacket 的 SMB 客户端时“无法请求 session ”

Python 类似队列的数据结构

javascript - 没有回调的 jQuery 队列命令

javascript - 如果我使用的是 node.js,我还需要队列服务吗?

python - 我可以将 virtualenv 制作成鸡蛋吗

python - 通过用户输入编辑词典 - Python

c++ - C++ 中的临界区和返回值

c# - 后台线程的 Toast 通知失败

java - Spring MVC 中的同步方法