zoukankan      html  css  js  c++  java
  • Python——进程

    1.multiprocessing

    multiprocessing模块就是跨平台版本的多进程模块。在Windows环境下创建进程可以使用multiprocessing模块。multiprocessing模块提供了一个Process类来代表一个进程对象。
    创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例。用start()方法启动。join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
    不知道为什么该代码可以在IDLE下运行不了,在PyCharm下就可以运行。

    from multiprocessing import Process
    import os
    
    # 子进程要执行的代码
    def run_proc(name):
        print('Run child process %s(%s).' % (name, os.getpid()))
    
    if __name__ == '__main__':
        print('parent process %s.' % os.getpid())
        p = Process(target=run_proc, args=('test',))
        print('Child process will start...')
        p.start()
        p.join()
        print('Child process end...')
    

    运行结果

    parent process 6540.
    Child process will start...
    Run child process test(2468).
    Child process end...
    

    2.Pool

    如果要启动大量的子进程,可以用进程池的方式批量创建子进程。

    from multiprocessing import Pool
    import os,time,random
    
    
    # 子进程要执行的代码
    def run_proc(name):
        print('Run child process %s(%s).' % (name, os.getpid()))
        start=time.time()
        time.sleep(random.random()*3)
        end=time.time()
        print('child process %s run %0.2f seconds. '%(name,(end-start)))
    
    
    if __name__ == '__main__':
        print('parent process %s.' % os.getpid())
        p=Pool(5)      #这是Pool有意设计的限制,限制为5,并不是操作系统的限制,Pool的默认大小为cpu的核数。所以才会出现下面的进程5要等前面的一个进程完成才能开始
        for i in range(6):
            p.apply_async(run_proc,args=(i,))
        print('Waiting for...')
        p.close()     #调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了
        p.join()   #对Pool对象调用join()方法会等待所有子进程执行完毕
        print('All Child process end...')
    
    
    

    运行结果

    parent process 6208.
    Waiting for...
    Run child process 0(10512).
    Run child process 1(1152).
    Run child process 2(6980).
    Run child process 3(9124).
    Run child process 4(11588).
    child process 1 run 1.72 seconds. 
    Run child process 5(1152).
    child process 4 run 1.93 seconds. 
    child process 2 run 2.51 seconds. 
    child process 3 run 2.74 seconds. 
    child process 0 run 2.94 seconds. 
    child process 5 run 1.31 seconds. 
    All Child process end...
    
    

    子进程

  • 相关阅读:
    DES 算法的 C++ 与 JAVA 互相加解密
    ORACLE SQL 小记
    ACE 的头文件包含
    WTL 程序中显示 HTML
    GIS 中地理坐标和屏幕坐标的标准转换方法
    算盘中国古代伟大的计算器
    DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决
    服务端程序线程运行信息管理器
    ATL::CImage 的透明通道的处理与格式转换
    kinect sdk开发入门WPFdemo笔记
  • 原文地址:https://www.cnblogs.com/bbn0111/p/6771066.html
Copyright © 2011-2022 走看看