Python multiprocessing进程池实例分析如何应用?

2026-05-26 21:501阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1082个文字,预计阅读时间需要5分钟。

Python multiprocessing进程池实例分析如何应用?

原文内容:

本文实例讲述了Python多进程multiprocessing用法。分享给广大家长和学者参考,具体如下:

内容相关:

multiprocessing进程的创建与运行进程常用相关函数进程池为什么要有进程池

解析:

multiprocessingPython中的multiprocessing模块提供了创建和管理多进程的能力,它允许开发者利用多核处理器并行执行任务。

进程的创建与运行在multiprocessing模块中,可以通过`Process`类来创建一个新的进程。创建进程后,可以使用`start()`方法启动进程,进程开始执行。

进程常用相关函数multiprocessing提供了多种与进程相关的函数,如`Queue`用于进程间通信,`Pipe`用于管道通信,`Manager`用于进程间共享数据。

进程池进程池是预先创建一组进程,然后按照请求分配给这些进程执行任务。使用进程池可以提高程序的执行效率,避免频繁创建和销毁进程的开销。

为什么要有进程池进程池可以减少进程创建和销毁的开销,提高程序的执行效率,同时还可以更好地利用多核处理器的优势。

本文实例讲述了Python多进程multiprocessing、进程池用法。分享给大家供大家参考,具体如下:

内容相关:

multiprocessing:

  • 进程的创建与运行
  • 进程常用相关函数

进程池:

  • 为什么要有进程池
  • 进程池的创建与运行:串行、并行
  • 回调函数

多进程multiprocessing:

python中的多进程需要使用multiprocessing模块

  • 多进程的创建与运行:

1.进程的创建:进程对象=multiprocessing.Process(target=函数名,args=(参数,))

2.进程的运行: 进程对象.start()

进程的join跟线程的join一样,意义是 “阻塞当前进程,直到调用join方法的那个进程执行完,再继续执行当前进程”

注:在windows中代码中必须使用这个,在Linux 中不需要加这个

import multiprocessing,time,os def thread_run(): print(threading.current_thread()) def run(name): time.sleep(1) print("hello",name,"run in ",os.getpid(),"ppid:",os.getppid()) if __name__=='__main__':#必须加 obj=[] for i in range(10): p=multiprocessing.Process(target=run,args=('bob',)) obj.append(p) p.start() start_time=time.time() for i in obj: i.join() print("run in main") print("spend time :",time.time()-start_time)

  • 与多线程同样的:也可以通过继承multiprocessing的Process来创建进程

继承multiprocessing的Process类的类要主要做两件事:

1.如果初始化自己的变量,则先要调用父类的__init__()然后做自己的初始化;如果不需要初始化自己的变量,那么不需要重写__init__,直接使用父类的__init__即可

2.重写run函数

Python multiprocessing进程池实例分析如何应用?

import multiprocessing class myProcess(multiprocessing.Process): def run(self): print("run in myProcess") if __name__=="__main__": p=myProcess() p.start() p.join()


进程常用相关函数:

  • os.getpid():获取当前进程号。
  • os.getppid():获取当前进程的父进程号。
  • 进程对象.is_alive():判断进程是否存活

  • 进程对象.terminate():结束进程


进程池:

  • 为什么需要进程池
    • 如果要启动大量的子进程,可以用进程池的方式批量创建子进程,而进程池可以限制运行的进程的数量

    from multiprocessing import Pool import time,os def func1(i): time.sleep(1) print("run in process:",os.getpid()) return "filename" def log(arg):##参数为进程创建中func的函数的返回值 print("log done :",arg) if __name__=="__main__": pool=Pool(5) start_time = time.time() for i in range(10): pool.apply_async(func=func1,args=(i,),callback=log,)#log的参数是func1的返回值 pool.close()#先close再等待 pool.join() print("main run done,spend_time:",time.time()-start_time)

    • 注:对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
        • 小测试:

    更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》

    希望本文所述对大家Python程序设计有所帮助。

本文共计1082个文字,预计阅读时间需要5分钟。

Python multiprocessing进程池实例分析如何应用?

原文内容:

本文实例讲述了Python多进程multiprocessing用法。分享给广大家长和学者参考,具体如下:

内容相关:

multiprocessing进程的创建与运行进程常用相关函数进程池为什么要有进程池

解析:

multiprocessingPython中的multiprocessing模块提供了创建和管理多进程的能力,它允许开发者利用多核处理器并行执行任务。

进程的创建与运行在multiprocessing模块中,可以通过`Process`类来创建一个新的进程。创建进程后,可以使用`start()`方法启动进程,进程开始执行。

进程常用相关函数multiprocessing提供了多种与进程相关的函数,如`Queue`用于进程间通信,`Pipe`用于管道通信,`Manager`用于进程间共享数据。

进程池进程池是预先创建一组进程,然后按照请求分配给这些进程执行任务。使用进程池可以提高程序的执行效率,避免频繁创建和销毁进程的开销。

为什么要有进程池进程池可以减少进程创建和销毁的开销,提高程序的执行效率,同时还可以更好地利用多核处理器的优势。

本文实例讲述了Python多进程multiprocessing、进程池用法。分享给大家供大家参考,具体如下:

内容相关:

multiprocessing:

  • 进程的创建与运行
  • 进程常用相关函数

进程池:

  • 为什么要有进程池
  • 进程池的创建与运行:串行、并行
  • 回调函数

多进程multiprocessing:

python中的多进程需要使用multiprocessing模块

  • 多进程的创建与运行:

1.进程的创建:进程对象=multiprocessing.Process(target=函数名,args=(参数,))

2.进程的运行: 进程对象.start()

进程的join跟线程的join一样,意义是 “阻塞当前进程,直到调用join方法的那个进程执行完,再继续执行当前进程”

注:在windows中代码中必须使用这个,在Linux 中不需要加这个

import multiprocessing,time,os def thread_run(): print(threading.current_thread()) def run(name): time.sleep(1) print("hello",name,"run in ",os.getpid(),"ppid:",os.getppid()) if __name__=='__main__':#必须加 obj=[] for i in range(10): p=multiprocessing.Process(target=run,args=('bob',)) obj.append(p) p.start() start_time=time.time() for i in obj: i.join() print("run in main") print("spend time :",time.time()-start_time)

  • 与多线程同样的:也可以通过继承multiprocessing的Process来创建进程

继承multiprocessing的Process类的类要主要做两件事:

1.如果初始化自己的变量,则先要调用父类的__init__()然后做自己的初始化;如果不需要初始化自己的变量,那么不需要重写__init__,直接使用父类的__init__即可

2.重写run函数

Python multiprocessing进程池实例分析如何应用?

import multiprocessing class myProcess(multiprocessing.Process): def run(self): print("run in myProcess") if __name__=="__main__": p=myProcess() p.start() p.join()


进程常用相关函数:

  • os.getpid():获取当前进程号。
  • os.getppid():获取当前进程的父进程号。
  • 进程对象.is_alive():判断进程是否存活

  • 进程对象.terminate():结束进程


进程池:

  • 为什么需要进程池
    • 如果要启动大量的子进程,可以用进程池的方式批量创建子进程,而进程池可以限制运行的进程的数量

    from multiprocessing import Pool import time,os def func1(i): time.sleep(1) print("run in process:",os.getpid()) return "filename" def log(arg):##参数为进程创建中func的函数的返回值 print("log done :",arg) if __name__=="__main__": pool=Pool(5) start_time = time.time() for i in range(10): pool.apply_async(func=func1,args=(i,),callback=log,)#log的参数是func1的返回值 pool.close()#先close再等待 pool.join() print("main run done,spend_time:",time.time()-start_time)

    • 注:对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
        • 小测试:

    更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》

    希望本文所述对大家Python程序设计有所帮助。