zoukankan      html  css  js  c++  java
  • Python 多进程与进程池

    # fork方法是调用一次,返回两次,原因在于操作系统将当前进程(父进程)复制出一份进程(子进程),这两个进程几乎完全相同,
    # 于是fork方法分别在父进程和子进程中返回。子进程中永远返回0,父进程中返回的是子进程的ID。
    import os
     
    if __name__ == '__main__':
        print('current Process (%s) start ...' % (os.getpid()))
        pid = os.fork()
        print(pid)
        if pid < 0:
            print('error in fork')
        elif pid == 0:
            print('I am child process(%s) and my parent process is (%s)' % (os.getpid(), os.getppid()))
        else:
            print('I(%s) created a chlid process (%s).' % (os.getpid(), pid))
     

    # multiprocessing模块提供了一个Process类来描述一个进程对象。
    # 创建子进程时,只需要传入一个执行函数和函数的参数,即可完成一个Process实例的创建,
    # 用start()方法启动进程,用join()方法实现进程间的同步。
    import os
    from multiprocessing import Process
     
     
    def run_proc(name):
        print('Child process %s (%s) Running...' % (name, os.getpid()))
     
     
    if __name__ == '__main__':
        print('Parent process %s.' % os.getpid())
        for i in range(5):
            p = Process(target=run_proc, args=(str(i),))
            print('Process will start.')
            p.start()
            p.join()
        print('Process end.')
     

    # Pool可以提供指定数量的进程供用户调用,默认大小是CPU的核数。当有新的请求提交到Pool中时,如果池还没有满,
    # 那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,
    # 那么该请求就会等待,直到池中有进程结束,才会创建新的进程来处理它。
    from multiprocessing import Pool
    import os, time, random
     
     
    def run_task(name):
        print('Task %s (pid = %s) is running...' % (name, os.getpid()))
        time.sleep(random.random() * 3)
        print('Task %s end.' % name)
     
     
    if __name__ == '__main__':
        print('Current process %s.' % os.getpid())
        p = Pool(processes=3)
        for i in range(5):
            p.apply_async(run_task, args=(i,))
        print('Waiting for all subprocesses done...')
        p.close()
        p.join()                                #join方法会等待所有子进程执行完毕
        print('All subprocesses done.')
     
  • 相关阅读:
    简体中文和繁体中文的转换
    EasyPoi 快速Office 开发
    玩转SpringBoot之定时任务详解
    Spring Boot中使用Swagger2构建强大的RESTful API文档
    一篇文章带你搞懂 SpringBoot与Swagger整合
    JAVA团队开发手册
    CentOS(6、7)修改主机名(hostname)
    SpringBoot多环境部署,在启动时动态设置相应的配置文件
    MyBatis逆向工程代码的生成以及使用详解(持续更新)
    MySQL写入插入数据优化配置
  • 原文地址:https://www.cnblogs.com/juchangfei/p/12802753.html
Copyright © 2011-2022 走看看