Python-生産者と消費者は、2つのスレッド間通信

生産者と消費者:二つのスレッド間の通信

パイソンは、FIFO(先入れ先出し)キューキュー、LIFO(最後にファーストアウト)キューLifoQueue、およびプライオリティキュー優先度つきキューを含む、同期キュー、キューベースのスレッドセーフが設けられています。これらのキューは、ロックの原理を実現している(または最後まで行わないのいずれかことがアトミック動作として理解することができる)、それは、複数のスレッドに直接使用することができます。

キューは、スレッド間の同期を達成するために使用することができます。

ここに画像を挿入説明


コードの実装


import threading
import queue
import random
import time

def produce(q):
    i = 0
    while i < 10:
        num = random.randint(1,100)
        q.put('生产者生产数据:%d' % num)
        print('生产者生产数据:%d' % num)
        time.sleep(1)
        i += 1
    q.put(None)
    # 完成任务
    q.task_done()

def consume(q):
    while True:
        item = q.get()
        if item is None:
            break
        print('消费者获取到:%s' % item)
        time.sleep(1)

    # 完成任务
    q.task_done()

if __name__ == '__main__':
    q = queue.Queue(10)
    arr = []

    # 创建生产者
    th = threading.Thread(target=produce,args=(q,))
    th.start()

    # 创建消费者
    tc = threading.Thread(target=consume,args=(q,))
    tc.start()

    th.join()
    tc.join()

出力:

生产者生产数据:65
消费者获取到:生产者生产数据:65
生产者生产数据:52
消费者获取到:生产者生产数据:52
生产者生产数据:19
消费者获取到:生产者生产数据:19
生产者生产数据:42
消费者获取到:生产者生产数据:42
生产者生产数据:9
消费者获取到:生产者生产数据:9
生产者生产数据:10
消费者获取到:生产者生产数据:10
生产者生产数据:45
消费者获取到:生产者生产数据:45
生产者生产数据:90
消费者获取到:生产者生产数据:90
生产者生产数据:25
消费者获取到:生产者生产数据:25
生产者生产数据:9
消费者获取到:生产者生产数据:9
公開された50元の記事 ウォンの賞賛4 ビュー1349

おすすめ

転載: blog.csdn.net/weixin_43999327/article/details/104022829