即使是单核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,没等到就向下执行了
Python多进程(multiprocessing)(mp)(一) —— 进程的创建 & join()方法
于 2020-04-24 23:18:59 首次发布