zoukankan      html  css  js  c++  java
  • 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失败了。
     
     
     
     
     
  • 相关阅读:
    thinkphp中field的用法
    Thinkphp常用标签
    thinkphp框架的相关总结
    TP 控制器扩展_initialize方法实现原理
    Thinkphp中的volist标签(查询数据集(select方法)的结果输出)用法简介
    php中遍历数组的方法
    django自定义过滤器
    centos7 安装 mysql
    centos7 安装 nginx
    centos 服务器改名
  • 原文地址:https://www.cnblogs.com/LLeiFeng/p/4066147.html
Copyright © 2011-2022 走看看