当前位置: 首页 > 图灵资讯 > 行业资讯> Python中的多进程是什么

Python中的多进程是什么

发布时间:2025-11-03 16:23:30

多进程 multiprocessing

因为Python是跨平台的,所以自然要提供跨平台的多流程支持。multiprocesing模块是跨平台版本的多流程模块。

multiprocesing模块提供了一个process类来代表一个过程对象。

Unix/Linux操作系统提供fork()系统调用,非常特殊。普通函数调用,调用一次,返回一次,但fork()调用一次,返回两次,因为操作系统自动复制当前过程(称为父过程)一份(称为子过程),然后在父过程和子过程中返回。

子过程总是返回0,而父过程返回子过程的ID。原因是一个父亲的过程可以启用许多子过程。因此,父亲的过程应该记录每个子过程的ID,而子过程只需调用getpid()即可获得父亲过程的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)andmyparentis6973.

通过fork调用,一个过程可以在收到新任务时复制一个子过程来处理新任务。常用的Apache服务器是父亲过程监控端口。每当有新的http请求时,fork出子过程就会处理新的http请求。

但是windows操作系统中没有这个fork。因此,为了保证不同操作系统之间的调用,出现了处理fork的通用模块。

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

multiprocesing模块提供了一个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
Parentprocess7027.
Childprocesswillstart.
Runchildprocesstest_code(70228)
Childprocessend.

创建子过程时,只需传输执行函数和函数的参数,创建Process实例,并通过start()启动,使创建过程比fork()更简单。

join()该方法可在子过程结束后继续向下运行,通常用于过程间的同步。

相关文章

Python中的多进程是什么

Python中的多进程是什么

2025-11-03
Python中的进程是什么

Python中的进程是什么

2025-11-03
Python中的进程池是什么

Python中的进程池是什么

2025-11-03
Python如何进行进程间的通信

Python如何进行进程间的通信

2025-11-03
Python中的子进程是什么

Python中的子进程是什么

2025-11-03
Python list列表添加元素的3种方法

Python list列表添加元素的3种方法

2025-11-03