首页 > 代码库 > python 多进程
python 多进程
1. 进程 VS 程序
编写完毕的代码,在没有运行的时候,称之为程序
正在运行着的代码,就成为进程
进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的
FORK
#coding=utf-8 import os import time num = 0 # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 pid = os.fork() #相当于创建了2个进程
if pid == 0: num+=1 print(‘哈哈1---num=%d‘%num) else: time.sleep(1) num+=1 print(‘哈哈2---num=%d‘%num)
运行结果:
总结:
- 多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响
- 只能在linux/unix 里执行,windows里没有fork
- fork 会在执行的时候生产一个PID 为0 的子进程。
结果
多次fork问题
如果在一个程序,有2次的fork函数调用,是否就会有3个进程呢?
#coding=utf-8 import os import time # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 pid = os.fork() if pid == 0: print(‘哈哈1‘) else: print(‘哈哈2‘) pid = os.fork() if pid == 0: print(‘哈哈3‘) else: print(‘哈哈4‘) time.sleep(1)
运行结果:
所以 上面的if else 分成两个进程,两个进程结束后又各自分出2个进程 一共四个进程。
父子进程的执行顺序
父进程、子进程执行顺序没有规律,完全取决于操作系统的调度算法
#下面是fork炸弹,不信你可以一下。。 while Ture: os.fork
multiprocessing
如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择。由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序?
由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。
multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结束:
from multiprocessing import Process # 子进程要执行的代码 def test(name): print(‘子进程运行中,name= %s ,pid=%d...ppid=%d‘ % (name, os.getpid(),os.getppid())) if __name__==‘__main__‘: print(‘父进程 %d.‘ % os.getpid()) p = Process(target=test, args=(‘test‘,)) print(‘子进程将要执行‘) p.start()#让这个进程开始执行test函数里的代码 p.join()# 等待子进程结束 print(‘子进程已结束‘)
运行结果:
Process
- target:表示这个进程实例所调用对象
- args:表示调用对象的参数元组
- name:为当前进程实例的别名
Process常用方法:
- is_alive():判断进程实例是否还在执行;
- join(【timeout】):是否等待进程实例执行结束,timeout:超时时间
- start():启动进程实例(创建子进程)
- run():如果没有给定target参数,对这个对象调用start()方法时,将执行对象的run方法
- terminate():不管任务(进程)是否结束,立即终止
python 多进程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。