使用multiprocesss模块进程通信采用队列方式,子进程run执行完一直不能退出的问题

在Python多进程编程中,使用消息队列进行进程间通信时遇到子进程无法正常退出的问题。子进程在run方法执行后仍保持活动状态,导致主进程join后无法完全退出。该问题可能与向队列中放入大对象有关,尽管队列默认无大小限制,但大对象可能导致进程阻塞。解决方案是避免通过队列传递大量日志,因为这可能会引发其他问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程间通信常用的方法有信号量共享内存消息队列,python的multiprocesss模块提供了与平台无关的进程相关的API

在项目中使用 multiprocesss 多进程编程时遇到奇怪的问题是: 使用消息队列在不同进程间通信,子进程run方法执行后进程一直不能退出,主进程里调用join方法等待子进程结束,子进程一直不能退出从而导致主进程不能退出


项目背景
由于在线程对象里不能创建 logger 对象,子进程产生的日志如果需要保存,一种不太推荐的方法是把日志放到消息队列里,子进程结束后主进程把日志从信息队列中读出来。 以下是重现项目中出现问题的代码

import ctypes
import re
from multiprocessing import Queue
from multiprocessing import Pool
import random

import time

from multiprocessing import Value
from multiprocessing import Process
from src.spider.logmanage import loadLogger
from src.util.mongodbhelper import MongoDBCRUD


class Counsumer(Process):

    def __init__(self, queue: Queue, name: s
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值