python 线程通信 queue模块

2022-06-01  本文已影响0人  孙广宁
12.3 程序中如果有多个线程,我们想在这些线程之间实现安全的通信或者交换数据
from queue import Queue
from threading import Thread
import time

def producer(out_q):
    while True:
        time.sleep(5)
        out_q.put("test")
        print("produce data")


def consumer(in_q):
    while True:
        time.sleep(6)
        data = in_q.get()
        print("consumer",data)
q = Queue()
t1 = Thread(target=producer,args=(q,))
t2 = Thread(target=consumer,args=(q,))
t1.start()
t2.start()

[root@apollo gnsun]# python thread.py 
produce data
consumer test
produce data
consumer test
produce data
consumer test
produce data

from queue import Queue
from threading import Thread
import time

_sentinal = object()

def producer(out_q,n):
    while n>0:
        time.sleep(5)
        data = "test{0}".format(n)
        out_q.put(data)
        print("produce data ",n)
        n -=1
    out_q.put(_sentinal)


def consumer(in_q):
    while True:
        time.sleep(6)
        data = in_q.get()
        print("consumer",data)
        if data is _sentinal:
            in_q.put(_sentinal)
            break


q = Queue()
t1 = Thread(target=producer,args=(q,5,))
t2 = Thread(target=consumer,args=(q,))
t1.start()
t2.start()
[root@apollo gnsun]# python thread.py 
produce data  5
consumer test5
produce data  4
consumer test4
produce data  3
consumer test3
produce data  2
consumer test2
produce data  1
consumer test1

上一篇 下一篇

猜你喜欢

热点阅读