我正在使用Python启动并发程序。我有一个简单的问题: 我正在使用Thread类创建多个并发进程。 我希望这些线程彼此传递对象(所以我希望线程不仅注意到某个事件,而且从该事件中获取一个对象(发生时!)。) 我怎样才能做到这一点?非常感谢!
代码示例:
class Process(Thread):
def __init__(self):
super(Processo, self).__init__()
def run(self):
myObject = SomeObject(param1, param2, param3)
# Code to pass myObject to all the threads
# Code waiting for the object to use it
def main():
process1 = Process()
process2 = Process()
process3 = Process()
process1.start()
process2.start()
process3.start()
答案 0 :(得分:0)
您可以使用queue.Queue
在线程之间进行通信。有两个线程的简单示例。一个线程将项目放置在queue
的一侧,而另一个线程将其放置。 queue
也可以用于多生产者,多消费者的应用程序(但在实施计划之前应该如何工作)。
from queue import Queue
from random import randint
import threading
import time
class Producer(threading.Thread):
def __init__(self, queue):
super(Producer, self).__init__()
self.queue = queue
def run(self):
while True:
thread_name = self.name
if not self.queue.full():
print('Will send "{}"'.format(thread_name))
self.queue.put(thread_name)
time.sleep(randint(1, 3))
class Consumer(threading.Thread):
def __init__(self, queue):
super(Consumer, self).__init__()
self.queue = queue
def run(self):
while True:
if not self.queue.empty():
received = self.queue.get()
print('Received "{}"'.format(received))
time.sleep(randint(1, 3))
if __name__ == '__main__':
q = Queue()
a = Producer(queue=q)
b = Consumer(queue=q)
a.start()
b.start()
a.join()
b.join()
sleeps
只是为了演示而放慢速度。有Queue
注意:线程与进程不同。小心使用术语,可能会被误解。