• fork()函数


    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失败了。
     
     
     
     
     
  • 相关阅读:
    毕业了!
    mesos无执行器启动docker
    docker run option
    maintenance
    virtualenv
    multi role
    排序之插入排序
    DLU-1064 美声葱
    codeforces-1025 A Doggo Recoloring
    codeforces-1027 C Minimum Value Rectangle
  • 原文地址:https://www.cnblogs.com/LLeiFeng/p/4066147.html
Copyright © 2020-2023  润新知