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

    子进程

  • 相关阅读:
    ThinkPHP框架 做个简单表单 添加数据例子__ACTION__ __SELF__
    ThinkPHP框架 系统规定的方法查询数据库内容!!同时也支持原生的SQL语句!
    ThinkPHP框架 基础 链接数据库
    ThinkPHP框架 3.2.2 获取系统常量信息 连接数据库 命名空间的理解
    ThinkPHP框架 自定义 Empty 方法保护本地信息不被暴露!!!
    Smarty模板保留缓存
    this指向
    phpcms v9 的表单向导功能的使用方法 附多个案例
    phpcms标签整理_当前栏目调用
    转载]PhpCms V9调用指定栏目子栏目文章的两种方法
  • 原文地址:https://www.cnblogs.com/bbn0111/p/6771066.html
Copyright © 2011-2022 走看看