【多线程】Python进程,队列和锁相关的一些问题

1.需求

一般的服务都提供一个代理或者监听进程,接收网络数据,然后根据数据类型分发到业务处理进程。

业务处理进程再根据实际情况处理或者创建新的进程线程。

我这里有一个listen_task监听进程,定义queue_from_net队列

__listen_control负责把网络数据缓存放入queue_from_net

__listen_handle负责从queue_from_net获取处理数据,并根据实际情况,

新建两个__query_schedule进程放入query_queue或者select_queue队列由__query_schedule处理

或者关闭__query_schedule进程

2、实现

__listen_control将网络数据放入到queue_from_net队列

__listen_handle根据start或者stop来创建或者终止__query_schedule进程

__query_schedule从队列中get处理

3.问题

__query_schedule在queue_from_listen_task队列get之前,打印出队列长度queue come in

启动成功__query_schedule一次之后,停止之后,再重新开始queue come in size为1,正常预期get出来之后queue_from_listen_task长度变为0

关闭之后,再启动,__query_schedule打印queue come in size为2,上一次get没有获取成功队列。

猜测是进程terminate的时候,队列锁没有释放,导致后面的队列GET不到

4.解决

在terminate进程之前,显示的把队列释放掉,task_done()

再次尝试,问题解决

时间: 2024-10-17 00:34:30

【多线程】Python进程,队列和锁相关的一些问题的相关文章

python 进程队列

#_*_coding:utf-8_*_ from multiprocessing import Process,Queue import os,time def f(q,n): q.put([n,'hello']) if __name__ == '__main__': #此queue不是直接导入的import Queue,这个是multiprocessing重新封装的 q=Queue() #循环6个进程 for i in range(5): p=Process(target=f,args=(q,

Python 用队列实现多线程并发

# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站增加注释,可随意Fork.Copy from queue import Queue # Queue在3.x中改成了queue import random import threading import time class Producer(threading.Thread): ""&qu

python运维开发(十)----IO多路复用多线程、进程、协程

内容目录: python作用域 python2.7和python3.5的多继承区别 IO多路复用 多线程.进程.协程 python作用域  python中无块级作用域 if 1 == 1: name = 'jabe' print(name) #可以正常输出jabe #在python中无块级作用域 #在c#或者java中是不能这样使用的,提示name未定义的 python中以函数为作用域 def func(): name = 'jbae' func() print(name) #会提示name为定

Python第十二章-多进程和多线程01-多进程

多进程和多线程 一.进程 1.1 进程的引入 现实生活中,有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的:试想,如果把唱歌和跳舞这2件事情分开依次完成的话,估计就没有那么好的效果了(想一下场景:先唱歌,然后在跳舞,O(∩_∩)O哈哈~) 程序中 如下程序,来模拟"唱歌跳舞"这件事情 # 模拟唱歌,跳舞 from time import sleep def sing(): for i in range(3): print("

python进程、线程、协程

进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构--进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控

Python进程、线程、协程详解

进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构——进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控

python进程池剖析(一)

python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要实现调用外部程序的功能,python的psutil模块是更好的选择,它不仅支持subprocess提供的功能,而且还能对当前主机或者启动的外部程序进行监控,比如获取网络.cpu.内存等信息使用情况,在做一些自动化运维工作时支持的更加全面.multiprocessing是python的多进程模块,主要

python进程、线程、协程以及几种自定义线程池

Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time    def show(arg):     time.sleep(1)     print 'thread'+str(arg)    for i in range(10):     t = threading.Thread(target=show, args

python进程、多进程

进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体.. 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的