python并发编程之进程1(守护进程,进程锁,进程队列)
进程的其他方法
P = Process(target=f,)
P.Pid 查看进程号 查看进程的名字p.name
P.is_alive() 返回一个true或者False
P.terminate() 给操作系统发送一个结束进程的信号
验证进程之间是空间隔离的
from multiprocessing import Process num = 100 def f1():
global num
num = 3
print(num) # 结果 3 if __name__ == '__main__':
p = Process(target=f1,)
p.start()
p.join()
print(num) # 结果 100
守护进程
主进程的代码运行完毕设置为守护进程的子进程会随之结束
P.daemon = True
import time
from multiprocessing import Process def f1():
time.sleep(3)
print('xxxx') def f2():
time.sleep(5)
print('普通子进程的代码') if __name__ == '__main__': p = Process(target=f1,)
p.daemon = True
p.start()
p2 = Process(target=f2,)
p2.start()
print('主进程结束') # 守护进程会跟跟着父进程的代码运行结束,就结束
进程锁
数据共享 manager
多进程操作共享数据(文件内容)的时候,会造成数据不安全的问题
保证数据安全,但是牺牲了效率,加锁的这段代码大家变成了(同步)串行执行的状态,又叫同步锁\互斥锁
两种锁的方式
l = Lock()
1).with l:
锁中内容
2).
l.acquire()
锁中内容
l.release()
import time
from multiprocessing import Process,Manager,Lock def f1(m_d,l2):
with l2:
# l2.acquire()
tmp = m_d['num']
tmp -= 1
time.sleep(0.1)
m_d['num'] = tmp
# l2.release() if __name__ == '__main__':
m = Manager()
l2 = Lock()
m_d = m.dict({'num':100})
p_list = []
for i in range(10):
p = Process(target=f1,args=(m_d,l2))
p.start()
p_list.append(p) [pp.join() for pp in p_list] print(m_d['num'])
队列
Queue()
Q = Queue(10)
Q.put() 放数据
Q.get() 取数据
Q.qsize() 返回的是当前队列中内容的长度
Q.put_nowait() 不等待,但是报错
Q.get_nowait() 不等待,也是报错
Q.full() q.empty()
用队列实现消费者生产者模型 : 缓冲用,解耦用的,
import time
from multiprocessing import Process,Queue,JoinableQueue
#生产者
def producer(q):
for i in range(10):
time.sleep(0.2)
s = '大包子%s号'%i
print(s+'新鲜出炉')
q.put(s)
q.join() #就等着task_done()信号的数量,和我put进去的数量相同时,才继续执行
print('所有的任务都被处理了')
#消费者
def consumer(q):
while 1:
time.sleep(0.5)
baozi = q.get() print(baozi+'被吃了')
q.task_done() #给队列发送一个取出的这个任务已经处理完毕的信号 if __name__ == '__main__':
# q = Queue(30)
q = JoinableQueue(30) #同样是一个长度为30的队列 pro_p = Process(target=producer,args=(q,))
con_p = Process(target=consumer,args=(q,))
pro_p.start()
con_p.daemon = True
con_p.start() pro_p.join()
print('主进程结束')
python并发编程之进程1(守护进程,进程锁,进程队列)的更多相关文章
- python并发编程之多线程2---(死锁与递归锁,信号量等)
一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去.此时称系统处于死锁状态或系统 ...
- python并发编程之多线程2死锁与递归锁,信号量等
一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 这些永远在互相等待的进程称为死锁进程 如下就是死锁 ...
- Python并发编程一(多进程)
1.背景知识(进程.多道技术) 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一 ...
- Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁
Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线程join.守护线程.线程互斥锁 目录 Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线 ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...
- Python进阶(4)_进程与线程 (python并发编程之多进程)
一.python并发编程之多进程 1.1 multiprocessing模块介绍 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大 ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...
- python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asynci ...
- Python并发编程05 /死锁现象、递归锁、信号量、GIL锁、计算密集型/IO密集型效率验证、进程池/线程池
Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密集型效率验证.进程池/线程池 目录 Python并发编程05 /死锁现象.递归锁.信号量.GIL锁.计算密集型/IO密 ...
- Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...
随机推荐
- GUI的最终选择 Tkinter(六):Canvas组件
Canvas组件,是一个可以让你任性的组件,一个可以让你随心所欲地绘制界面的组件.Canvas是一个通用的组件,它通常用于显示和编辑图形,可以用它来绘制直线,圆形,多边形,甚至是绘制其他组件. 在Ca ...
- AtCoder Regular Contest 075 2017年6月4日 C、D、E题解
http://arc075.contest.atcoder.jp/assignments 昨晚做的atcoder,今天写个简单题解. F题不会做,800point的,就跪了,要等zk大佬来做.zk能做 ...
- mysql查看各个表的大小
information_schema 数据库,在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引 ...
- 【持续更新】MyBatis相关
MyBatis开发结构 #与$的区别
- django之session配置
session应用示例 from django.shortcuts import render from django.shortcuts import HttpResponse from djang ...
- Python之查询最新的文件
import os # 定义文件的目录 result_dir = r'E:\python\测试报告' lists = os.listdir(result_dir) # 重新按时间对目录下的文件进行排序 ...
- javascript 和Jquery 互转
jQuery对象转成DOM对象: 两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得 ...
- 【TensorFlow入门完全指南】模型篇·最近邻模型
最近邻模型,更为常见的是k-最近邻模型,是一种常见的机器学习模型,原理如下: KNN算法的前提是存在一个样本的数据集,每一个样本都有自己的标签,表明自己的类型.现在有一个新的未知的数据,需要判断它的类 ...
- SAP C4C Opportunity和SAP ERP Sales流程的集成
首先在C4C里创建一个新的Opportunity: 给这个Opportunity添加一个新的产品: 点按钮:Request Pricing, 从ERP抓取pricing数据,点按钮之前Negotiat ...
- 融云红包全新升级,让App用户更便捷地用“钱”交流感情!
随着移动互联网的飞速发展,如何增强社交关系.留住用户的心已成为移动社交化时代各类App持续探索的问题,除了接入即时通讯的能力,众多社交平台开始通过趣味性十足的红包功能为App中的社交场景赋能.当即时通 ...