2.3 python并发编程-多进程

python并发编程有以下几种

  • 多进程
  • 多线程
  • 协程(异步)

首先,进程是计算机中程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。多进程编程允许同时运行多个进程,每个进程都有自己独立的内存空间等资源。

multiprocessing

Python 的multiprocessing模块提供了创建和管理进程的功能,multiprocessing模块允许你通过创建Process对象来启动新的进程,这些进程在操作系统层面是独立运行的,每个进程都有自己独立的内存空间,因此它们之间的数据不会相互干扰。示例如下

import multiprocessing

def 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 time

def fibonacci(n):
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b

numbers = [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 Celery

app = Celery('tasks', broker='amqp://guest:guest@localhost:5672//')

@app.task
def add(x, y):
    return x + y

# 调用任务
from tasks import add

result = add.delay(3, 4)
print(result.get())

配置好后,调用命令启动celery

celery -A tasks worker --loglevel=info

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值