1. 程式人生 > 實用技巧 >生產者以及消費者模式(多程序)

生產者以及消費者模式(多程序)

code
import time
import random
from multiprocessing import Process, Queue
 
# 生產者
def producer(q, i):
    food = 'Spam-%d' % i
    time.sleep(random.uniform(2, 5))
    timeVal = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print('時間:%s\t生產者:%d 生產了 %d' % (timeVal, i, i))
    q.put(food)
 
# 消費者
def consumer(q, i):
    
while True: food = q.get() if not food: break time.sleep(random.uniform(1, 2)) timeVal = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print('時間:%s\t消費者: %d\t吃了 %s' % (timeVal, i, food)) if __name__ == '__main__': q = Queue() producerPs
= [] for n in range(1, 16): producerPs.append(Process(target=producer, args=(q, n))) for producerP in producerPs: producerP.start() consumerPs = [] for n in range(1, 3): consumerPs.append(Process(target=consumer, args=(q, n))) for consumerP in consumerPs: consumerP.start()
for producerP in producerPs: producerP.join() for consumerP in consumerPs: q.put(None) for consumerP in consumerPs: consumerP.join() print('end')
outputs
macname@MacdeMacBook-Pro py % python3 cccccc.py
時間:2020-03-23 16:12:18    生產者:6 生產了 6
時間:2020-03-23 16:12:18    生產者:1 生產了 1
時間:2020-03-23 16:12:19    生產者:11 生產了 11
時間:2020-03-23 16:12:19    生產者:8 生產了 8
時間:2020-03-23 16:12:19    生產者:9 生產了 9
時間:2020-03-23 16:12:19    生產者:12 生產了 12
時間:2020-03-23 16:12:20    生產者:7 生產了 7
時間:2020-03-23 16:12:20    消費者: 1    吃了 Spam-6
時間:2020-03-23 16:12:20    生產者:10 生產了 10
時間:2020-03-23 16:12:20    生產者:3 生產了 3
時間:2020-03-23 16:12:20    生產者:15 生產了 15
時間:2020-03-23 16:12:20    生產者:13 生產了 13
時間:2020-03-23 16:12:20    生產者:2 生產了 2
時間:2020-03-23 16:12:20    消費者: 2    吃了 Spam-1
時間:2020-03-23 16:12:20    生產者:4 生產了 4
時間:2020-03-23 16:12:21    生產者:5 生產了 5
時間:2020-03-23 16:12:21    生產者:14 生產了 14
時間:2020-03-23 16:12:21    消費者: 1    吃了 Spam-11
時間:2020-03-23 16:12:21    消費者: 2    吃了 Spam-8
時間:2020-03-23 16:12:22    消費者: 1    吃了 Spam-9
時間:2020-03-23 16:12:23    消費者: 2    吃了 Spam-12
時間:2020-03-23 16:12:24    消費者: 1    吃了 Spam-7
時間:2020-03-23 16:12:24    消費者: 2    吃了 Spam-10
時間:2020-03-23 16:12:25    消費者: 1    吃了 Spam-3
時間:2020-03-23 16:12:26    消費者: 2    吃了 Spam-15
時間:2020-03-23 16:12:27    消費者: 1    吃了 Spam-13
時間:2020-03-23 16:12:27    消費者: 2    吃了 Spam-2
時間:2020-03-23 16:12:28    消費者: 1    吃了 Spam-4
時間:2020-03-23 16:12:29    消費者: 2    吃了 Spam-5
時間:2020-03-23 16:12:30    消費者: 1    吃了 Spam-14
end
macname@MacdeMacBook-Pro py %