多进程编程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的优势,并提高程序的运行效率。