进程的其他方法

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()

用队列实现消费者生产者模型 : 缓冲用,解耦用的,

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('主进程结束')

最新文章

  1. curl命令学习笔记
  2. NPOI简介
  3. struts请求基本类型参数接收
  4. ecstore b2b2c 商城页面伪静态代码 及相关注意事项
  5. 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
  6. OC - 13.数据解析(JSON与XML)
  7. JSP语法
  8. 【转】Nginx配置文件详细说明
  9. 野生程序员对.NETFramework 4.0 ThreadPool的理解
  10. form表单与后台请求的关系
  11. python学习中的一些“坑”
  12. Effective Java 之-----谨慎的覆盖clone方法
  13. ZJOI2007仓库建设
  14. 2.5配置的框架浅析「深入浅出ASP.NET Core系列」
  15. centos 7 常用工具篇
  16. hdu 5459(2015沈阳网赛) Jesus Is Here
  17. 第一阶段·Linux运维基础-第1章·Linux基础及入门介绍
  18. c#LINQ表达树
  19. 使用maven拆分项目
  20. Session过期后自动跳转到登录页面的实例代码

热门文章

  1. vue项目axios请求接口,后端代理请求接口404,问题出现在哪?
  2. Sentry有什么作用
  3. 安卓Dialog对话框多次显示而闪退的解决办法
  4. jquery中的ajax请求,阻塞ui线程的解决方案(自己总结的demo)
  5. 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)—— 1.Practice Questions: Key concepts on Deep Neural Networks
  6. jquery.cropper 裁剪图片上传
  7. vector源码1(参考STL源码--侯捷):源码
  8. 把 Elasticsearch 当数据库使:聚合后排序
  9. Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别
  10. tomcat如何正确的开启远程调试功能