2013-03-20 56 views
2

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

我有以下情况:每个线程需要根据自己的数据或来自其他线程的数据做一些计算。另外,每个线程都知道其他线程是否拥有特定作业所需的数据(所有线程都有一个所有线程的数组,所以任何线程都知道,对于任务X,他需要从特定线程(行,列)获取数据,来自该阵列)。

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

回答

2

使用队列

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

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

您应该阅读一般的并行编程。这些概念相当独立于语言。然后你可以阅读关于使用Python的线程的教程。互联网上有关于这两个主题的大量资料。

编辑:

使用threading.Event

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

+0

你能想出一个线程如何通知另一个特定的线程它需要什么吗?线程和另一个特定线程之间的通信方式?谢谢 – biggdman 2013-03-20 13:33:39

+0

有很多方法可以实现这一点(甚至可以(错误地)使用队列)。我会去做一个简单的线程事件,只有在绝对必要时才会使它更复杂。 – 2013-03-20 13:43:17

+0

是否可以这样做:询问线程为他想要数据的不同线程初始化不同的事件(如果他想从线程(行,列)数据中创建事件)。其运行方法中的每个线程处理事件。每个线程可以有一个行,col属性,可以在每个线程的init方法中设置。我不是很连贯,对不起 – biggdman 2013-03-20 13:52:20