最近使用Python的多进程multiprocessing模块时遇到了一个进程挂起问题。特在此记录一下。
先给出一个多进程应用的最小代码。
import multiprocessing as mp
def produce(q):
"""生产者"""
for i in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
q.put(i)
print(f"Producer quit.")
def consume(q):
"""消费者"""
while True:
r = q.get()
if r == 9:
break
print("Consumer quit.")
if __name__ == "__main__":
q = mp.Queue()
consumer = mp.Process(target=consume, args=(q,))
consumer.start()
producer = mp.Process(target=produce, args=(q,))
producer.start()
producer.join()
consumer.join()
print("Main quit.")
这段代码中,主进程构建了一个队列,然后派生两个子进程:一个生产者与一个消费者。生产者进程按顺序将一个包含从1到9的数字列表中的元素逐个填充到队列中。消费者进程逐个将队列中的元素取出,并在读取到最后一个元素的时候退出。这段代码运行的输出如下:
Producer quit.
Consumer quit.
Main quit.<