FastAPI使用Celery做队列之二
本篇是FastAPI使用Celery做队列之二,与前篇不同的是,本篇是从实际项目中抽取的代码,并使用Redis做broker。
首先我们新添加个`celery_queue.py`,定义celery实例和相关配置,以及定时任务的执行,代码如下:
Home of Little Jelly
本篇是FastAPI使用Celery做队列之二,与前篇不同的是,本篇是从实际项目中抽取的代码,并使用Redis做broker。
首先我们新添加个`celery_queue.py`,定义celery实例和相关配置,以及定时任务的执行,代码如下:
FastApi使用Celery的任务时报错AssertionError: daemonic processes are not allowed to have children。
报错的起因是我在这个任务中使用了`process`函数,相当于开了一个子进程,而uvicorn默认启动的是守护进程(daemon),而一般情况下守护进程是不能创建子进程的。
要在FastAPI中使用Celery队列和定时执行任务,需要遵循以下步骤:
1. 首先,在项目中安装Celery和相应的消息队列,比如RabbitMQ或Redis。
2. 创建一个包含Celery配置的文件,比如celeryconfig.py。这个文件应该包含Celery的配置信息,例如消息队列的连接信息、任务序列化方式、任务结果序列化方式等等。
Celery队列可以被集成在Django中。
假定我们已经有一个Django项目叫`pyseg`.
首先在`pyseg/pyseg`下新建一个`mycelery.py`
Python中使用Celery队列。
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
消息中间件:Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB, Amazon SQS,CouchDB, SQLAlchemy ,Django ORM, IronMQ。推荐使用RabbitMQ、Redis作为消息队列。