Python 多进程笔记

一. 进程

1. 进程概述

进程就是计算机中程序的一次运行活动(Process),是操作系统的结构基础。

2. 创建进程

from multiprocessing import Process

process = Process(target=函数, name=进程名, args=(函数需要的参数,))

process # 是一个进程对象

process.run()		# 运行任务, 不启动进程
process.name()		# 获取进程名字
process.start()		# 运行进程, 执行函数
process.terminate() # 终止进程

当多个进程共同访问|修改一个全局变量的时候,变量在各进程中单独存在

3.自定义进程

自定义进程用来访问自己的方法

  • 继承Process类

  • 重写__init__方法添加自己的属性, 使用super()加载父类属性

    • super(当前类, self).__init__()
  • 重写run方法, 内容就写在此方法中

4.进程池与阻塞和非阻塞

进程池, 可以指定最大进程数, 当有任务时, 就在进程池中开辟一个进程, 直到进程池满, 当在有任务时, 任务等待进程池中某任务完成在继续

# 进程池
form multiprocessing import Pool


pool = Pool(Max)
pool.apply()       # 阻塞式
pool.apply_async() # 非阻塞式

pool.close()       # 停止添加进程
pool.join()        # 让主进程让步, 避免主进程死亡,导致子进程死亡

# 非阻塞式: 全部添加到队列中, 主进程立刻返回, 并没有等待其他进程完毕, 但是回调函数时等待任务完成之后才调用
# 阻塞式: 每运行一个添加一个, 上一个完成创建新的线程继续下一个, 线程依然会服用

pool.apply_async(task, args=(i,), callback=callback_print)

​ 函数 参数 回调函数 函数

5.进程间通信

from multiprocessing import Queue


q = Queue(5) # 队列, 我理解为一个列表, 只能存五个元素
q.put("A")	# 添加一个元素
q.qsize()	# 相当于len, 查看长度
q.full():   # 判断队列是否满   
q.empty()   #判断队列是否是空的
q.put(6, timeout=3)  # timeout设置时间, 超时退出 put() 如果queue满了则只能等待, 直到有空位置.

# 获取队列的值
q.get(timeout=2)	# 取内容
q.put_nowait()		# 不阻塞的存储
q.get_nowait()		# 不阻塞的取			都会抛出异常


# 用法
# 创建线程的时候当参数传进函数, 一个存, 一个取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值