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

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

时间2025-06-17 04:55:39分类IT科技浏览4942
导读:多进程 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
希腊字母在latex中怎么输(LaTeX常用的希腊字符、数学符号、矩阵、公式、排版、中括号、大括号以及插入图片等操作手册) 利用python进行中文词频统计不用jieba(疑问搞懂,python中文词频统计,让你真能学会)