zoukankan      html  css  js  c++  java
  • python-创建进程的三种方式

    1,os.fork() 方法

     import os
     ret = os.fork()
     if ret == 0:
     	#子进程
     	print("Sub process pid = %d, Sub process ppid = %d" % (os.getpid(), os.getppid()))
     else:
        #父进程
        print("Parent Process ret = %d" % ret)
        print("Parent Process pid = %d" % os.getpid())
    

    在该方法中,执行os.fork()会再创建一个进程,原进程(父进程)返回一个大于零的值(即ret > 0),这个值恰好是子进程的pid;而创建的新进程会返回零(即ret = 0)。
    fork炸弹:在用户输入栏输入:

    while True:
        os.fork()
    

    设备内存就会很快被塞满,然后down掉。

    2,Process方法

    from multiprocessing import Process
    def func():
        print("i am subprocess")
        
    new_process = Process(tartget=func)
    print("i am Parent Process")
    

    Process方法需要指定一个函数,且父进程会等待子进程结束。另外可以新建一个example类继承Process类,然后重写__init__和run()函数,之后调用example.start(),它就会自动执行run()函数。

    3,Pool方法

    from multiprocessing import Pool
    import time
    def worker(x):
        for j in range(1, 11):
            print("%d:%d" % (x, j))
            time.sleep(1)
    
    pool = Pool(3) # run 3 process simultaneously
    for i in range(1, 11):
        print(i)
        pool.apply_async(worker, (i,))
    
    print("---start---")
    pool.close() # 关闭进程池,不允许继续添加进程
    pool.join() # 等待进程池中的所有进程结束
    print("---end---")
    

    Pool方法即进程池,需要说明有几个进程同时运行。在使用apply_async方法时第一个参数是函数名,第二个参数需要输入一个元组。在示例代码中,进程池同时允许三个进程运行,另外七个进程排队等候,当第一批的三个进程执行完后,第二批的三个再执行。所以进程池相当于起到了缓冲的作用。
    实际上,在进程池的方式中,父进程基本上只需要等待子进程执行(使用pool.join()进行等待),任务都是交给子进程执行的。


    作者:bitterz
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!
  • 相关阅读:
    Windows 10下CUDA及cuDNN的安装 —— Pytorch
    Centos7 python3环境搭建 兼容python2.7
    VMware中Linux虚拟机与Windows主机共享文件夹
    基于阿里云服务器的网站搭建 新手教程
    CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
    Linux基本命令 和 Regex 正则表达式
    Shell 编程 基础用法
    Perl 编程 基础用法
    Python3 网络通信 网络聊天室 文件传输
    Ant Design of Angular
  • 原文地址:https://www.cnblogs.com/bitterz/p/10239734.html
Copyright © 2011-2022 走看看