多进程编程2 参考资料:《python开发技术详解》

多进程编程2

多进程编程是指在一个程序中同时运行多个进程,每个进程都具有独立的程序计数器、堆栈、地址空间等系统资源。在Python中,可以使用multiprocessing模块来进行多进程编程。

创建子进程

在Python中,可以使用multiprocessing模块的Process类来创建子进程。以下是创建子进程的代码示例:

import multiprocessing

def func():

print("Child process")

if __name__ == '__main__':

p = multiprocessing.Process(target=func)

p.start()

p.join()

print("Parent process")

在上面的代码中,首先导入了multiprocessing模块,然后定义了一个函数func(),该函数用于在子进程中运行。在if __name__ == '__main__'语句下,创建了一个Process对象p,指定了func()函数为子进程的入口函数,然后调用start()方法启动子进程,join()方法用于等待子进程结束。最后打印出"Parent process"。

进程间通信

在多进程编程中,不同进程之间需要进行通信,可以使用multiprocessing模块的Queue类来实现进程间通信。

import multiprocessing

def producer(q):

for i in range(1, 6):

q.put(i)

def consumer(q):

while not q.empty():

print(q.get())

if __name__ == '__main__':

q = multiprocessing.Queue()

p1 = multiprocessing.Process(target=producer, args=(q,))

p2 = multiprocessing.Process(target=consumer, args=(q,))

p1.start()

p2.start()

p1.join()

p2.join()

在上面的代码中,首先创建了一个Queue对象q,然后创建了两个子进程p1和p2,p1调用producer()函数向队列中放入数据,p2调用consumer()函数从队列中取出数据并打印。最后调用start()方法启动子进程,join()方法用于等待子进程结束。

进程池

在实际开发中,如果需要创建大量的子进程,可以使用multiprocessing模块的Pool类来创建进程池。

import multiprocessing

def func(x):

return x * x

if __name__ == '__main__':

pool = multiprocessing.Pool(processes=4)

result = pool.map(func, range(1, 6))

print(result)

在上面的代码中,创建了一个进程池对象pool,该进程池中最多同时运行4个进程。然后调用map()方法,将func()函数作用在range(1, 6)中的每个元素上,并返回结果的列表。

总结

本文介绍了Python中的多进程编程,通过使用multiprocessing模块可以方便地创建子进程、实现进程间通信和创建进程池。多进程编程可以充分利用多核CPU的优势,并提高程序的运行效率。

后端开发标签