python多进程

来源:互联网 发布:大数据 重庆 编辑:程序博客网 时间:2024/05/29 11:04

os.fork()方法

该方法会衍生出一个子进程,父进程和子进程都会执行接下来的代码,方法返回值根据进程不同,父进程返回>0的一个数值,子进程返回0。

想获得操作系统层面上的进程id需要调用os.getpid()


创建子进程后,父进程退出后子进程也会被回收,所以父进程一般需要调用os.wait()或os.waitpid()方法等待子进程结束

os.wait()等待任意一个子进程结束,os.waitpid(pid,options)等待指定pid的进程结束。


守护进程:

os.umask(0)    #修改文件模式,让进程有最大权限,保证进程有读写执行权限,这个不是一个好的方法。
os.setsid()       #该方法做一系列的事:首先它使得该进程成为一个新会话的领导者,接下来它将进程转变一个新进程组的领导者
                    #最后该进程不再控制终端, 运行的时候,建立一个进程,linux会分配个进程号。然后调用os.fork()创建子进程。若pid>0就是自己,自杀。子进程跳过if语句,通过os.setsid()成为linux中的独立于终端的进程(不响应sigint,sighup等)。


进程间管道通信:

r,w=os.pipe()

r=os.fdopen(r)

w=os.fdopen(w,'w')

w.write(str)

r.read()


获取指定信号后执行指定函数:

import signal

signal.signal(sig,function)      #获取指定sig后执行function

os.kill(pid,sig)                        #发送sig信号给进程id为pid的进程


进程退出的方法有:

sys.exit(status),status为0代表正常退出,为1是异常退出

os._exit(status),退出并返回status,不执行清理工作直接退出

os.kill(ospid,signal),模拟unix系统操作,所以ospid为unix下的进程id(os.getpid),signal有4种:

SIGINT      终止进程     中断进程

SIGTERM   终止进程     软件终止信号

SIGKILL    终止进程      杀死进程

SIGALRM   闹钟信号