并发编程

2022/10/02 python 共 1695 字,约 5 分钟

介绍并发编程中多进程,多线程,协程的概念和使用

基本概念

在Python中,进程、线程和协程都是用于实现并发和并行编程的概念,但它们在实现方式、资源占用和应用场景等方面有所不同。

1.进程(Process)

进程是操作系统分配资源和调度任务的基本单位。每个进程都有自己的独立内存空间,进程间的通信需要特殊的机制。在 Python 中, 可以使用 multiprocessing 模块创建和管理多个进程。每个进程都有自己独立的 Python 解释器,因此进程之间不会共享全局变量。

2.线程(Thread)

线程是进程内的最小任务单元,它们共享同一进程的资源,包括内存空间。由于线程共享内存,因此线程之间的通信和同步相对比较容易。 Python 中的 threading 模块可以用于创建和管理多个线程。

3.协程(Coroutine)

协程是一种轻量级的线程,是由用户控制的,可以随时挂起和恢复。协程通常用于实现高效的异步编程,允许在单个线程中实现并发。 在 Python 3.5 及之后的版本中,可以使用 asyncio 模块来实现协程,利用关键字 async 和 await 来定义和调用异步函数。

用例

1.进程示例

import multiprocessing

def worker1():
    print("Worker 1 executing")

def worker2():
    print("Worker 2 executing")

if __name__ == "__main__":
    process1 = multiprocessing.Process(target=worker1)
    process2 = multiprocessing.Process(target=worker2)

    process1.start()
    process2.start()

    process1.join()
    process2.join()

    print("Both processes are done")

2.线程示例

import threading

def worker1():
    print("Worker 1 executing")

def worker2():
    print("Worker 2 executing")

if __name__ == "__main__":
    thread1 = threading.Thread(target=worker1)
    thread2 = threading.Thread(target=worker2)

    thread1.start()
    thread2.start()

    thread1.join()
    thread2.join()

    print("Both threads are done")

3.协程使用

import asyncio

async def worker1():
    print("Worker 1 executing")
    await asyncio.sleep(1)
    print("Worker 1 done")

async def worker2():
    print("Worker 2 executing")
    await asyncio.sleep(2)
    print("Worker 2 done")

async def main():
    await asyncio.gather(worker1(), worker2())

if __name__ == "__main__":
    asyncio.run(main())

Eventloop 是asyncio应用的核心,把一些异步函数注册到这个事件循环上,事件循环会循环执行这些函数,当执行到某个函数时,如果它正在等待I/O返回, 如它正在进行网络请求,或者sleep操作,事件循环会暂停它的执行去执行其他的函数;当某个函数完成I/O后会恢复,下次循环到它的时候继续执行。 因此,这些异步函数可以协同(Cooperative)运行,这就是事件循环的目标。

应用场景

  • 使用多进程:当需要执行 CPU 密集型任务时,可以使用多进程来利用多个 CPU 核心。

  • 使用多线程:当需要执行 I/O 密集型任务时,可以使用多线程来提高任务的响应性能。

  • 使用协程:当需要在单个线程内执行高效的异步编程时,可以使用协程来减少线程切换开销。

需要根据具体的应用场景和性能需求选择适当的并发编程方式。

文档信息

搜索

    内容