python 任务队列
时间: 2023-10-13 08:26:26 浏览: 171
Python库 | huey-1.11.0.tar.gz
在 Python 中,我们通常使用消息中间件来实现任务队列。常见的消息中间件有 RabbitMQ、Redis 和 Kafka 等。这些消息中间件可以帮助我们实现任务队列,将任务加入队列并按照先进先出的顺序进行处理。
使用 RabbitMQ 实现任务队列的示例代码如下:
``` python
import pika
# 连接 RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 创建队列
channel.queue_declare(queue='task_queue', durable=True)
# 发送任务
def send_task(task):
channel.basic_publish(exchange='',
routing_key='task_queue',
body=task,
properties=pika.BasicProperties(
delivery_mode=2, # 使任务持久化
))
# 处理任务
def process_task(ch, method, properties, body):
print("Received %r" % body)
# 执行任务
# ...
# 执行完毕后发送确认消息
ch.basic_ack(delivery_tag=method.delivery_tag)
# 每个消费者同时只能处理一个任务
channel.basic_qos(prefetch_count=1)
# 注册消费者
channel.basic_consume(queue='task_queue', on_message_callback=process_task)
# 启动消费者
channel.start_consuming()
```
以上代码中,我们使用 RabbitMQ 的 Python 客户端 pika 连接 RabbitMQ 并创建了队列。send_task() 函数用于向队列中发送任务,process_task() 函数用于处理任务。我们使用 channel.basic_publish() 发送任务,使用 channel.basic_consume() 注册消费者并启动消费者。
在实际使用中,我们可以将 send_task() 函数封装成一个任务队列的 API,供其他模块调用。同时,我们可以为每个任务设置超时时间,以便在任务长时间未完成时可以进行超时处理。
阅读全文