Python:如何在多交易程序中传递整个对象?

时间:2019-03-08 13:16:02

标签: python multithreading events python-multithreading

我正在使用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()

1 个答案:

答案 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

的文档

注意:线程与进程不同。小心使用术语,可能会被误解。