Python的进程

前言

在Python中,进程(Process)是独立运行的程序实例,每个进程有自己独立的内存空间、文件描述符等资源。Python提供了multiprocessing模块用于多进程编程,可以方便地创建和管理进程。

什么是进程(Process)

进程是操作系统分配资源和调度的基本单位。每个进程都有自己的内存空间,独立运行,并且无法直接与其他进程共享内存。进程的优点是稳定性高,一个进程的崩溃不会影响其他进程。缺点是进程间通信(IPC)比较复杂,且创建和切换进程的开销较大。我们电脑中每一个独立的应用,都是一个进程。

进程使用

在Python中,进程使用multiprocessing模块

import multiprocessing
import time 

def worker(num):
    """进程的工作函数"""
    time.sleep(5)
    print(f'进程: {num}')

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()
        

进程间通信

在Python中,进程间通信可以是使用QueuePipe等方式,当然也可以直接使用socket,这里简单看一下Python提供的通信模块

from multiprocessing import Process, Queue

def worker(q,i):
    q.put(f'process:{i}')

if __name__ == '__main__':
    q = Queue()
    for i in range(10):
        p = Process(target=worker, args=(q,i))
        p.start()
        p.join()
    while q.qsize() > 0 :
        print(q.get())  # 从队列中获取数据

进程池

一般情况下,推荐使用进程池来处理多进程任务,可以有效避免资源泄漏和性能问题。Python使用multiprocessing.Pool可以方便地管理多个进程

from multiprocessing import Pool

def square(x):
    return x * x

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

进程池的基本使用很简单,相当于提前创建一批进程,之后的所有任务都有这些进程来完成,直至进程池释放,可以理解为用空间来换时间,不用频繁进行创建和终止进程操作。

进程共享数据

Python提供了ValueArray模块可以在进程间共享数据

from multiprocessing import Process, Value, Array

def worker(num, arr):
    num.value = 3.14159
    for i in range(len(arr)):
        arr[i] = arr[i] * 2

if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('i', range(5))

    p = Process(target=worker, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])

如果对进程不是很熟悉的话,进程间数据共享和通信问题,只看代码很难理解的,可以自己动手取调试一下,更能促进对进程的理解,我个人也是花了很长时间,才理解进程和线程在我们编码中的实际区别。

总结

牢记一点,进程是资源平台,是操作系统进行资源分配和调度的基本单位,进程的详细定义和理解,可以自己查一下资料,这里只对Python中进程的使用做一个简单的介绍

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值