Python中实现多进程主要有两种方式:使用multiprocessing模块和使用os模块。下面我详细讲解这两种方式的创建与启动过程以及示例。
使用multiprocessing模块
multiprocessing模块是Python标准库中提供的多进程模块,它可以创建子进程并且提供类似线程的API。
1. 创建进程对象
要创建一个进程,需要先引入multiprocessing模块,然后创建一个进程对象。进程对象可接受函数作为参数,这个函数就是子进程要执行的任务。
import multiprocessing
def func():
print('sub process')
if __name__ == '__main__':
p = multiprocessing.Process(target=func)
上面代码中,函数func()将会在子进程中执行。创建进程对象时需要指定进程执行的任务,通过target参数来指定任务函数。
2. 启动进程
进程对象创建完成后,需要通过调用start()方法启动进程。
import multiprocessing
def func():
print('sub process')
if __name__ == '__main__':
p = multiprocessing.Process(target=func)
p.start()
3. 阻塞等待进程结束
创建并启动进程后,主进程可通过调用进程对象的join()方法来等待子进程结束后再继续执行。
import multiprocessing
def func():
print('sub process')
if __name__ == '__main__':
p = multiprocessing.Process(target=func)
p.start()
p.join()
上面代码中,使用join()方法可以阻塞主进程,直到子进程执行完毕为止。
示例
import multiprocessing
import os
def func(name):
print(f'child process {os.getpid()} with arg {name}')
if __name__ == '__main__':
p1 = multiprocessing.Process(target=func, args=('Alice',))
p2 = multiprocessing.Process(target=func, args=('Bob',))
p1.start()
p2.start()
p1.join()
p2.join()
执行结果:
child process 12345 with arg Alice
child process 12346 with arg Bob
上述代码创建了两个进程对象,分别通过args参数传入了不同的参数,在启动后分别输出了结果,最后通过join()方法等待子进程执行完成。
使用os模块
除了使用multiprocessing模块外,还可以使用os模块提供的fork()函数来创建子进程。
1. 创建进程
创建进程使用os中的fork()函数,它可以复制出一个子进程。
import os
if __name__ == '__main__':
pid = os.fork()
2. 判断进程身份
由于fork()函数产生了一个父进程和一个子进程,因此需要在代码中判断进程身份,决定进程要做的工作。父进程会得到子进程的pid,子进程的pid为0。
import os
if __name__ == '__main__':
pid = os.fork()
if pid > 0:
print(f'parent process with pid {os.getpid()}')
else:
print(f'child process with pid {os.getpid()}')
示例
import os
if __name__ == '__main__':
pid = os.fork()
if pid > 0:
print(f'parent process with pid {os.getpid()}')
else:
print(f'child process with pid {os.getpid()}')
执行结果:
parent process with pid 12345
child process with pid 12346
上述代码创建了一个子进程,输出了父进程和子进程的pid。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的多进程的创建与启动方式 - Python技术站