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

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

时间2025-08-04 18:43:21分类IT科技浏览5888
导读:多进程 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
wpsoffice怎么清理(如何清理c盘) SEO内链优化能有效促进排名的方法(深入了解SEO内链优化,提高网站排名)