Python多进程 - 实现多进程的几种方式

方式一: os.fork()

1# -*- coding:utf-8 -*- 2 3""" 4pid=os.fork() 5 1.只用在Unix系统中有效,Windows系统中无效 6 2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0 7""" 8 9import os 10 11pid=os.fork() 12 13if pid==0: 14 print("执行子进程,子进程pid={pid},父进程ppid={ppid}".format(pid=os.getpid(),ppid=os.getppid())) 15else: 16 print("执行父进程,子进程pid={pid},父进程ppid={ppid}".format(pid=pid,ppid=os.getpid()))

方式二: 使用multiprocessing模块: 创建Process的实例,传入任务执行函数作为参数

1# -*- coding:utf-8 -*- 2 3""" 4Process常用属性与方法: 5 name:进程名 6 pid:进程id 7 run(),自定义子类时覆写 8 start(),开启进程 9 join(timeout=None),阻塞进程 10 terminate(),终止进程 11 is_alive(),判断进程是否存活 12""" 13 14import os,time 15from multiprocessing import Process 16 17def worker(): 18 print("子进程执行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid())) 19 time.sleep(2) 20 print("子进程终止>>> pid={0}".format(os.getpid())) 21 22def main(): 23 print("主进程执行中>>> pid={0}".format(os.getpid())) 24 25 ps=[] 26 # 创建子进程实例 27 for i in range(2): 28 p=Process(target=worker,name="worker"+str(i),args=()) 29 ps.append(p) 30 31 # 开启进程 32 for i in range(2): 33 ps[i].start() 34 35 # 阻塞进程 36 for i in range(2): 37 ps[i].join() 38 39 print("主进程终止") 40 41if __name__ == '__main__': 42 main()

方式二: 使用multiprocessing模块: 派生Process的子类,重写run方法

1# -*- coding:utf-8 -*- 2 3import os,time 4from multiprocessing import Process 5 6class MyProcess(Process): 7 def __init__(self): 8 Process.__init__(self) 9 10 def run(self): 11 print("子进程开始>>> pid={0},ppid={1}".format(os.getpid(),os.getppid())) 12 time.sleep(2) 13 print("子进程终止>>> pid={}".format(os.getpid())) 14 15def main(): 16 print("主进程开始>>> pid={}".format(os.getpid())) 17 myp=MyProcess() 18 myp.start() 19 # myp.join() 20 print("主进程终止") 21 22if __name__ == '__main__': 23 main()

方式四: 使用进程池Pool

1# -*- coding:utf-8 -*- 2 3import os,time 4from multiprocessing import Pool 5 6def worker(arg): 7 print("子进程开始执行>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg)) 8 time.sleep(0.5) 9 print("子进程终止>>> pid={},ppid={},编号{}".format(os.getpid(),os.getppid(),arg)) 10 11def main(): 12 print("主进程开始执行>>> pid={}".format(os.getpid())) 13 ps=Pool(5) 14 for i in range(10): 15 # ps.apply(worker,args=(i,)) # 同步执行 16 ps.apply_async(worker,args=(i,)) # 异步执行 17 18 # 关闭进程池,停止接受其它进程 19 ps.close() 20 # 阻塞进程 21 ps.join() 22 print("主进程终止") 23 24if __name__ == '__main__': 25 main()

本文转自 https://blog.csdn.net/topleeyap/article/details/78981848,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

4cast

4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页: