python并发编程有一下几种
- 多进程
- 多线程
- 异步
- 协程
首先,进程是计算机中程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。多进程编程允许同时运行多个进程,每个进程都有自己独立的内存空间等资源。
multiprocessing
Python 的multiprocessing
模块提供了创建和管理进程的功能,multiprocessing
模块允许你通过创建Process
对象来启动新的进程,这些进程在操作系统层面是独立运行的,每个进程都有自己独立的内存空间,因此它们之间的数据不会相互干扰。示例如下
import multiprocessingdef print_numbers():for i in range(10):print(i)def print_letters():for letter in 'abcdefghij':print(letter)process1 = multiprocessing.Process(target=print_numbers)
process2 = multiprocessing.Process(target=print_letters)process1.start()
process2.start()process1.join()
process2.join()
ProcessPoolExecutor
oncurrent.futures
模块提供了一个高级接口用于异步执行可调用对象。ProcessPoolExecutor
是其中用于多进程执行任务的类。它可以方便地将任务提交到进程池中,并以异步方式获取结果。它隐藏了很多底层的细节,如进程的创建、管理和结果的收集等,使得代码更加简洁和易于理解。
import concurrent.futures
import timedef fibonacci(n):if n <= 1:return na, b = 0, 1for _ in range(2, n + 1):a, b = b, a + breturn bnumbers = [10, 20, 30, 40, 50]
with concurrent.futures.ProcessPoolExecutor() as executor:start_time = time.time()results = list(executor.map(fibonacci, numbers))end_time = time.time()print("Results:", results)print("Time taken:", end_time - start_time)
celery
celery
是一个强大的分布式任务队列框架,它基于消息传递实现任务的异步执行和分布式处理。在多进程场景下,celery
可以将任务分配到多个工作进程(worker)中进行处理。它由三部分组成:任务生产者(producer)、消息中间件(broker)和任务执行者(worker)。任务生产者将任务发送到消息中间件,消息中间件将任务分发给空闲的任务执行者进行处理。
# 定义一个简单的任务
from celery import Celeryapp = Celery('tasks', broker='amqp://guest:guest@localhost:5672//')@app.task
def add(x, y):return x + y# 调用任务
from tasks import addresult = add.delay(3, 4)
print(result.get())
配置好后,调用命令启动celery
celery -A tasks worker --loglevel=info