在Python中使用队列模块实现线程间传值
我想找一种方法,在Python中让多个线程之间传递值(比如整数、数组)。我知道可以用Queue模块来实现这个功能,但我对Python和这个模块都不太熟悉。
我有这样的一个场景:每个线程需要根据自己的数据或其他线程的数据进行一些计算。而且每个线程都知道其他线程持有什么数据,能用来完成特定的任务(所有线程都有一个包含所有线程的数组,所以任何线程都知道,完成任务X时需要从那个数组中的特定线程(行,列)获取数据)。
我该如何使用Queue模块或者其他方法来实现线程之间的通信呢?(Queue模块看起来很适合这个工作)。非常感谢任何帮助!
1 个回答
3
使用队列
通常,队列是在有很多工作线程的情况下使用的,这些线程从队列中获取它们的工作任务。空闲的线程会在队列上等待,直到有新的工作被放入队列中。然后,一个线程会执行这个工作,而其他的线程则继续等待下一个工作。如果放入的工作比可用的线程还多,队列就会开始堆积。
不过,这种情况可能不适合你描述的场景。也许你可以直接读取数据,而不需要放到队列里。如果你要在共享的数据结构中写入数据,可能需要考虑使用锁的策略。
你应该多了解一下并行编程的基本知识。这些概念在不同的编程语言中都是相似的。然后,你可以找一些关于Python线程的教程。网上有很多关于这两个主题的资料。
编辑:
使用 threading.Event 进行线程间通信
两个线程之间最简单的通信方式是使用 threading.Event
。这个事件可以被设置为真或假。通常,一个线程会设置这个事件,而另一个线程会检查这个事件的值并做出相应的操作。例如,这个事件可以表示有新的事情要做。设置事件的线程首先会填充即将要执行任务所需的数据结构,然后将事件设置为真。另一个在等待这个事件的线程会在事件为真后被激活。接着,它会读取数据结构并执行任务。