乐趣区

关于python:详解Python多进程使用

Python 除了反对多线程,还反对多过程。相比于多线程,多过程能够充分利用多核 CPU 的计算能力,实现真正的并行计算。在本文中,咱们将介绍 Python 中的多过程,以及如何应用 Python 的 multiprocessing 模块创立和治理过程。

一、什么是过程?

过程是操作系统分配资源的根本单位。每个过程都有本人的内存空间,这意味着过程之间的变量是隔离的,一个过程无法访问另一个过程的变量。

二、Python 中的过程

在 Python 中,咱们能够应用 multiprocessing 模块创立和治理过程。以下是一个创立过程的例子:


from multiprocessing import Process

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for letter in 'abcdefghij':
        print(letter)

process1 = Process(target=print_numbers)
process2 = Process(target=print_letters)

process1.start()
process2.start()

process1.join()
process2.join()

在这个例子中,咱们创立了两个过程:process1 和 process2。process1 的工作是打印数字 0 到 9,process2 的工作是打印字母 ’a’ 到 ’j’。
咱们应用 multiprocessing.Process 类创立了两个过程对象,并指定了每个过程的指标函数。而后,咱们调用了 start 办法来启动过程。
join 办法用于期待过程完结。这是阻塞调用,也就是说,调用 join 办法的过程(在这个例子中是主过程)会被阻塞,直到被调用 join 办法的过程(在这个例子中是 process1 和 process2)完结。

三、过程间通信

因为过程之间的内存是隔离的,所以过程之间不能间接通信。Python 的 multiprocessing 模块提供了多种过程间通信的工具,包含管道(Pipe)、队列(Queue)等。以下是一个应用队列进行过程间通信的例子:


from multiprocessing import Process, Queue

def worker(q):
    q.put('Hello, world!')

def main():
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()
    print(q.get())
    p.join()

if __name__ == '__main__':
    main()

在这个例子中,咱们创立了一个子过程,该子过程向队列中增加了一个音讯。主过程从队列中获取了这个音讯,并打印了它。通过队列,咱们实现了过程间的通信。

四、进程同步

和线程一样,过程也可能须要同步。Python 的 multiprocessing 模块提供了多种进程同步的工具,包含锁(Lock)、信号量(Semaphore)等。

五、Python 中的过程池

在 Python 中,咱们能够应用 multiprocessing.Pool 类创立一个过程池。过程池中的过程数量是固定的,当有新的工作提交到过程池时,如果过程池中有闲暇的过程,那么这个过程就会被调配到这个工作。如果所有的过程都在忙,那么这个工作就会期待,直到有过程变成闲暇状态。以下是一个应用过程池的例子:

pythonCopy code
from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(square, [1, 2, 3, 4, 5]))

在这个例子中,咱们创立了一个蕴含 5 个过程的过程池。而后,咱们应用 map 办法提交了一组工作到过程池。这组工作是计算一组数字的平方。map 办法会主动调配这些工作到过程池中的过程。

六、论断

Python 的多过程是一种弱小的工具,能够帮忙咱们编写出更高效的程序。然而,与所有并发编程一样,多过程编程也有其复杂性。为了防止竞态条件和其余并发问题,咱们须要认真地设计咱们的程序,并正确地应用进程同步工具。
以上就是对 Python 多过程的根本介绍,心愿对你有所帮忙。

七、最初

如果感觉本文对你有帮忙记得 点个关注,给个赞,加个珍藏, 更多精彩内容欢送查看。

退出移动版