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...
    
    

    子进程

  • 相关阅读:
    maven scope取值
    HashMap 解析
    MySQL中int(M)和tinyint(M)数值类型中M值的意义
    PyCharm 快捷键
    js 闭包,原型链,作用域链
    阿拉伯数字转中文大写金额JS(JavaScript方法)
    JSch
    Java面试点 -【笔记】
    tomcat Connector配置项 参数优化说明
    QRCanvas 示例使用
  • 原文地址:https://www.cnblogs.com/bbn0111/p/6771066.html
Copyright © 2011-2022 走看看