进程概念理解!

# 进程
# multiprocessing  处理进程
from multiprocessing import Process
# 开启子进程
# p = Process(target = 某个函数名 ,args = (参数1,参数2))
# p.start()
# 子进程和主进程
    # 1.数据隔离
    # 2.主进程等待子进程结束之后再结束
    # 3.子进程和主进程之间默认是异步的
    # 4.守护进程 :在开启子进程之前可以设置子进程为守护进程,p.daemon = True
    #              守护进程随着主进程的代码执行结束而结束
    # 5.start/terminate 都是非阻塞的

from multiprocessing import Lock
# 锁 -- 互斥锁
# 为什么要有锁?
    # 保证数据的安全
    # 多个进程使用同一份数据资源的时候/操作文件、操作共享数据、操作数据库
    # acquire/release

from multiprocessing import Queue
# IPC 进程之间的通信
# 之所以有队列,是因为队列可以完成进程之间的消息传递
# 队列 :在进程之间数据安全(进程安全)
# 队列 :socket + pickle +锁 == 管道 + 锁
# 管道是进程安全的么???不是
# 管道 :socket + pickle
# 生产者消费者模型
    # 解决数据的 获取 和 处理 之间 时间不对等的情况
    # 能够自由的添加 生产者和消费者的数量 以达到在相同的事件中 数据的处理速度能达到一个最大值
# queue = Queue(5)
# get/put

from multiprocessing import Manager
# 给我们提供了很多能够实现数据共享的工具 dict/list
# dict 能够在进程之间进行数据共享 -- 进程不安全
# += -= *= /= 数据不安全  都需要加锁
# dic['k'] += 1
# lst[1] += 1

from multiprocessing import Pool
# 进程池
# 为什么要有进程池?
    # 节省资源和操作系统的调度成本
# 一般情况下:开启的进程个数 cpu个数 1-2倍之间
# p = Pool()  # 默认是cpu的核数
# p.map(func,iterable)/p.apply_async(func,args = (1,2,3))
# 进程池,同一时间最多有多少个进程能够同时执行任务? 和进程池中进程的个数有关系
# p.apply_async --> 使用close/join来保证主进程等待所有进程池中的任务执行完毕
# ret = p.apply_async(...) --> 在提交所有任务之后,从ret中获取结果(函数的返回值)也能够让主进程等待池中任务都完成
# 回调函数 callback参数,用来保证一个任务在执行完毕之后,立刻出发callback回调函数中的内容,并且子进程的函数返回值作为callback函数的参数

# 1.进程是一个开销比较大的机制
# 2.进程之间数据隔离
# 3.阻塞会影响进程的执行效率
# 4.过多的进程会给操作系统带来不小的压力
# 5.在有多个任务的时候要注意控制进程的数量 —— 进程池
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值