首页IT科技python 多进程管理(Python中的多进程是什么)

python 多进程管理(Python中的多进程是什么)

时间2025-09-15 16:24:35分类IT科技浏览6705
导读:多进程 multiprocessing...

多进程 multiprocessing

由于Python是跨平台的                  ,自然也应该提供一个跨平台的多进程支持                  。multiprocessing模块就是跨平台版本的多进程模块                            。

multiprocessing模块提供了一个Process类来代表一个进程对象          。

Unix/Linux操作系统提供了一个fork()系统调用                            ,它非常特殊                  。普通的函数调用          ,调用一次                  ,返回一次                           ,但是fork()调用一次          ,返回两次         ,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程)                           ,然后                   ,分别在父进程和子进程内返回                           。

子进程永远返回0         ,而父进程返回子进程的ID          。这样做的理由是                           ,一个父进程可以fork出很多子进程                   ,所以,父进程要记下每个子进程的ID                           ,而子进程只需要调用getppid()就可以拿到父进程的ID         。

Python的os模块封装了常见的系统调用                            ,其中就包括fork,可以在Python程序中轻松创建子进程:

importos print(Process(%s)start...%os.getpid()) #OnlyworksonUnix/Linux/Mac: pid=os.fork() ifpid==0: print(Iamchildprocess(%s)andmyparentis%s.%(os.getpid(),os.getppid())) else: print(I(%s)justcreatedachildprocess(%s).%(os.getpid(),pid))

运行结果如下:

Process(69673)start... I(69673)justcreatedachildProcess(69674) Iamchildproces(69674)andmyparentis69673.

有了fork调用                  ,一个进程在接到新任务时就可以复制出一个子进程来处理新任务                            ,常见的Apache服务器就是由父进程监听端口          ,每当有新的http请求时                  ,就fork出子进程来处理新的http请求                           。

但是这个fork在windows操作系统是没有的                   。于是出现了处理fork的通用模块                           ,以保证在不同操作系统间的调用         。

multiprocessing模块就是跨平台版本的多进程模块                           。

multiprocessing模块提供了一个Process类来代表一个进程对象          ,下面的例子演示了启动一个子进程并等待其结束:

#!/usr/bin/envpython #coding=utf-8 frommultiprocessingimportProcess importos """ 子进程要执行的代码 """ defrun_proc(name): print(Runchildprocess%s(%s)%(name,os.getpid())) if__name__==__main__: print(Parentprocess%s.%os.getpid()) p=Process(target=run_proc,args=(test_code,)) print(Childprocesswillstart.) p.start() p.join() print(Childprocessend.)

执行结果如下:

$pythonforkbymutilprocessing.py Parentprocess70227. Childprocesswillstart. Runchildprocesstest_code(70228) Childprocessend.

创建子进程时         ,只需要传入一个执行函数和函数的参数                           ,创建一个Process实例                   ,用start()方法启动         ,这样创建进程比fork()还要简单                   。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
vue路由页面跳转(vue2路由跳转页面) 固态硬盘多久会变慢(主机固态硬盘多久换一个为好?)