Python多进程(multiprocessing)(mp)(一) —— 进程的创建 & join()方法

即使是单核CPU,也能执行多任务

进程&线程

       对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程

      有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

进程

      程序编写完没有运行称之为程序。正在运行的代码就是进程。

      在 Python3 语言中,对多进程支持的是 multiprocessing 模块和 subprocess 模块。 multiprocessing 模块为在子进程中运行任务、通讯和共享数据,以及执行各种形式的同步提供支持

创建进程

       Python 提供了非常好用的多进程包 multiprocessing,只需要定义一个函数, Python 会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。 multiprocessing支持子进程、通信和共享数据

Process(group, target ,name , args , kwargs)

      其中 target 表示调用对象, args 表示调用对象的位置参数元组。 kwargs 表示调用对象的字典。 name 为别名。 group 参数未使用,值始终为 None

创建子进程并执行

from multiprocessing import Process
#定义子进程代码
def run_proc():
	print('子进程运行中')

if __name__ == '__main__':
	print('父进程运行')
	p=Process(target=run_proc)
	print('子进程将要执行')
	p.start()

这里if __name__ == '__main__' 不能没有

创建子进程,传递参数

from multiprocessing import Process
import os
from time import sleep
#创建子进程代码

def run_proc(name,age,**kwargs):
	for i in range(5):
		print('子进程运行中,参数 name: %s,age:%d'%(name,age))
		print('字典参数 kwargs: ',kwargs)
		sleep(0.5)

if __name__=='__main__':
	print('主进程开始运行')
	p=Process(target=run_proc,args=('test',18),kwargs={'m':23})
	print('子进程将要执行')
	p.start()

join()方法的使用

join方法是主进程等待调用join方法的子进程终止

from multiprocessing import Process
from time import sleep

def worker(interval):
	print("work start")
	sleep(interval)
	print("work end")

if __name__ == "__main__":
	print('主进程正在执行')
	#创建子进程
	p = Process(target = worker, args = (3,))   #记住这里,如果传递的元组是1个元组,记得加逗号
	p.start()
	#等待进程 p 终止
	p.join()
	#等子进程执行完后再输出
	print("主进程结束!")

join可以带一个timeout参数,意思是我就等你这些时间,如果这些时间你结束不了,我主进程就继续向下执行

from multiprocessing import Process
from time import sleep

def worker(interval):
	print("work start")
	sleep(interval)
	print("work end")

if __name__ == "__main__":
	print('主进程正在执行')
	p = Process(target = worker, args = (5,))
	p.start()
	#等待进程 p 终止
	p.join(3)
	print("主进程结束!")

让线程睡眠5s,而主进程就等3s,没等到就向下执行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值