python中的进程

本文详细介绍了进程的概念、创建方式及参数设置,并深入探讨了进程间的通信机制,包括队列的使用方法及其重要属性。此外,还对比了进程与线程的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1进程:一个运行的程序就叫进程,例如qq,微信
    进程是操作系统分配资源的基本单位
2.创建一个进程:
        process = multiprocessing.Process(target=test)#test:表示目标函数
        process.start()

import multiprocessing,time,os

def test():
    # 获取子进程pid
    pid = multiprocessing.current_process().pid
    # 获取父进程的pid
    ppid = os.getppid()
    # 查看当前进程
    print(multiprocessing.current_process())
    print("子进程:",pid,ppid)
    for i in range(10):
        print("子进程lllll------")
        time.sleep(0.1)
        # 根据pid杀死进程
        os.kill(pid,9)


if __name__ == '__main__':
    # 查看当前进程
    print(multiprocessing.current_process())
    pid = multiprocessing.current_process().pid
    print("父进程",pid)
    t = multiprocessing.Process(target=test)
    t.start()
    for ie in range(10):
        print("父进程-------")
        time.sleep(0.1)


3.Process中的参数:
    group:进程组
    target:目标函数
    name:进程名字
    args:以元组的方式给目标函数传参
    kwargs:以字典的方式给目标函数传参
    t = multiprocessing.Process(group=None,target=test, name="myprocess", args=("小新",10))
    t = multiprocessing.Process(group=None,target=test, name="myprocess",kwargs={"name": "小白", "age": 20}
4.进程之间不共享全局变量
    进程之间都是独立的,所以进程之间不能共享全局变量但是进程之间也需要通信
   4.1进程之间的通信:
       使用队列,队列的进出顺序是先进先出
       q = multiprocessing.Queue(3) #3:表示可接收的消息数,如果没有指定的话默认为无上限
       q.get()#获取队列中的一个值,参数默认为True,如果队列为空了,就一直等待下队列里的消息,
                传入False的话,如果没有数据可读取了就会报错
       q.get(False) = q.get_nowait()
       q.put()#往队列里面写入数据   参数默认为True,如果队列为空了,就一直等待下一个消息传入,
                传入False的话,如果没有数据可读取了就会报错
       q.put(False) = q.put_nowait()
       q.full()#用来判断队列是否满了
       q.qsize()#获取队列的值的长度
       q.empty()#判断队列是否为空
5.Process创建子进程的时候,父进程会等子进程执行完再退出
6.进程池:Pool
    6.1 创建进程池
        p = multiprocessing.Pool(3)#创建一个进程池,最多可容纳三个进程
        p.apply(test):test:目标函数,同步执行
        p.apply_async(test):test:目标函数,异步执行,父进程不会等子进程执行完
        p.close()#进程池必须要关闭
    6.2 进程池中的通信:

import multiprocessing


def test(qu):
    for i in range(5):
        if qu.full():
            print("队列满了")
            break
        qu.put(i)
        print("---",i)


def test2(qu):
    while True:
        if qu.qsize() == 0:
            print("队列空了")
            break
        print(qu.get())


if __name__ == '__main__':
    q = multiprocessing.Manager().Queue(4)
    p = multiprocessing.Pool(3)
    for i in range(10):
        p.apply(test,args=(q,))
        p.apply(test2,args=(q,))

    p.close()
7.进程与线程
    7.1 进程是操纵系统资源调度和分配的基本单位  ——  线程是CPU调度和分配的基本单位
    7.2 一个进程只要拥有一个线程
    7.3 线程是比进程更小的基本单位
    7.4 线程的存在必须依赖于进程
Python中,进程、线程和协程是实现并发编程的不同方式。 1. 进程(Process)是操作系统分配资源的基本单位,每个进程有独立的内存空间,互不干扰。进程之间的通信需要使用特定的机制,如管道、消息队列等。在Python中,可以使用`multiprocessing`模块创建和管理进程。 2. 线程(Thread)是进程内的独立执行流,一个进程可以包含多个线程,它们共享相同的内存空间。线程之间的通信比进程更方便,可以使用共享内存或者全局变量。然而,由于全局解释器锁(GIL)的存在,同一时间只有一个线程在执行Python字节码,因此多线程在CPU密集型任务中并不能提高性能。但是对于I/O密集型任务,多线程可以提升效率。Python内置的`threading`模块提供了对线程的支持。 3. 协程(Coroutine)是一种轻量级的线程,由程序控制在特定位置进行挂起和恢复的并发执行。协程能够在执行过程中被暂停和继续,并且可以通过yield语句进行交互式通信。Python中的协程通过生成器函数(generator function)和`asyncio`库来实现。 总结一下: - 进程是资源分配的基本单位,进程之间资源独立,通信复杂。 - 线程是进程内的执行流,共享内存,通信相对方便,但受到GIL的限制。 - 协程是一种轻量级的线程,可以在特定位置挂起和恢复执行,并通过yield语句进行通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值