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

时间:2013-03-20 13:15:10

标签: python multithreading queue python-multithreading

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

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

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

1 个答案:

答案 0 :(得分:2)

使用队列

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

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

您应该阅读一般的并行编程。这些概念与语言无关。然后,您可以阅读有关使用Python的线程的教程。互联网上有很多关于这两个主题的资料。

编辑:

使用threading.Event

进行线程之间的通信

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