python队列queue不堵塞_Python - 进程中队列达到一定长度,会阻塞进程正常退出,导致程序一起挂起...

因为队列是阻塞的,当队列长度超过默认的最大长度时,调用put就会阻塞,进程就卡住不会退出了;同样,如果队列为空时,调用get也同样会阻塞卡住。(不过我尝试加大队列长度,创建queue时指定maxsize似乎也没起效果)

队列一般用于生产者消费者模型,如果你再创建一个消费者进程来消费队列里的东西,就不会有问题了。当然也要注册队列为空时get也会阻塞,可以加timeout参数指定超时时间,或用get_nowait

给你个例子:

import multiprocessing

def queueuein(queue):

for x in range(20000):

print('+', x)

queue.put(x)

print('queueuein 结束')

queue.put(None) # 结束标志

def consume(queue):

while True:

r = queue.get()

if r is None: # 取得None就结束

break

print('-', r)

if __name__ == '__main__':

queue = multiprocessing.Queue(maxsize=100)

process = multiprocessing.Process(target=queueuein, args=(queue,))

consume_process = multiprocessing.Process(target=consume, args=(queue,))

process.start()

consume_process.start()

process.join()

consume_process.join()

print('queue.qsinze() >>>', queue.qsize())

print('close .....')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值