码迷,mamicode.com
首页 > 其他好文 > 详细

fork()函数

时间:2014-10-31 23:38:00      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:style   os   ar   for   sp   div   on   art   bs   

1、操作系统中提供了一个fork()函数,它非常特殊。普通函数的调用,调用依次,返回一次。但是fork()函数调用一次,返回2次。因为操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。
子进程永远返回0,而父进程返回子进程的ID.这样做的理由是,一个父进程可以fork出很多子进程,所以父进程要记下每个子进程的ID,而子进程指需要调用getppid()就可以拿到父进程的ID.
 
python中的os 模块封装了常见的系统调用,其中就有fork.python程序创建子进程
import os
pid =os.fork()
if pid==0:
    子进程
else:
     父进程
 
由于windows没有fork调用,而python又是跨平台的,所以python提供一种跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。
multiprocessing模块提供了一个Process类来代表一个进程对象。
创建一个Process对象,用start方法来启动
p.start()
p.join()
join方法可以等待子进程结束后在继续往下执行,通常用来进程间的同步。
 
如果要大量产生子进程,可以用进程池的方式来批量产生子进程。
from multiprocessing import Pool
 
在 unix/linux 下 multiprocessing 模块封装了fork()调用。由于windows没有fork调用,因此multiprocessing 需要模拟出fork的效果,父进程所有的python对象都必须通过pickle序列化再传到子进程去,所以,如果multiprocessing在windows下调用失败了,要先考虑是不是pickle失败了。
 
 
 
 
 

fork()函数

标签:style   os   ar   for   sp   div   on   art   bs   

原文地址:http://www.cnblogs.com/LLeiFeng/p/4066147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!