在python中可以通过os.fork()创建子进程,但是这种方式只能在linux,unix,mac下面使用,不能跨平台,所以一般不推荐使用这种方式。Python提供了一个multiprocessing模块来创建多进程,这种方式写起来更简单,且支持跨平台,一般推荐使用multiprocessing模块来创建多线程。
1.使用Process来创建进程
from multiprocessing import Process import os def pringLog(msg): print(msg) print('子进程id: %s' % os.getpid()) print('父进程id: %s' % os.getppid()) if __name__ == '__main__': p = Process(target=pringLog, args=('hello world',)) p.start() print('父进程id: %s' % os.getpid()) print("我是主进程代码") 输出: 父进程id: 34076 我是主进程代码 hello world 子进程id: 30084 父进程id: 34076注意:如果是在windows系统下,创建进程的代码需要放在__name__ == '_main_'下面,否则会报错。
2.通过继承Process来创建进程
from multiprocessing import Process import os import time class MyProcess(Process): def run(self): print('子进程id %s' %os.getpid()) print('父进程id %s' % os.getppid()) for x in range(5): print('子进程 %s' %x) time.sleep(1) if __name__ == '__main__': myprocess = MyProcess() myprocess.start() myprocess.join() print('所有进程执行完毕') 输出: 子进程id 23388 父进程id 29012 子进程 0 子进程 1 子进程 2 子进程 3 子进程 4 所有进程执行完毕3.一个小技能,join函数 Join可以让主进程阻塞,直到子进程执行完毕才会执行主进程后面的代码,通过添加超时参数,还能控制阻塞时长。
from multiprocessing import Process import time def countdown(): for x in range(5): print("count:%s" % x) time.sleep(1) if __name__ == '__main__': p = Process(target=countdown) p.start() print('主进程') # 一直阻塞,直到子进程执行完毕 # p.join() # 阻塞三秒 p.join(3) print('所有进程执行完毕') 输出: 主进程 count:0 count:1 count:2 所有进程执行完毕 count:3 count:4本人是做大数据开发的,在微信上开了个个人号,会经常在上面分享一些学习心得,原创文章都会首发到公众号上,感兴趣的盆友可以关注下哦! 备注:微信公众号搜索‘大数据入坑指南