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.')
     
  • 相关阅读:
    Ng-model undefined in the controller
    使用nvm进行node多版本管理
    AngularJS内置指令
    angularjs ng-switch
    Interpreting NotifyCollectionChangedEventArgs zz
    XAML控件不可访问,它具有一定的保护级别
    WPF RadioButton的绑定
    WPF中的ObservableCollection数据绑定
    C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?zz
    python 获取mac地址zz
  • 原文地址:https://www.cnblogs.com/juchangfei/p/12802753.html
Copyright © 2011-2022 走看看