python常用库之分布式任务调度框架Celery
Celery是一个分布式任务队列,它使用Django ORM,Django模板系统和Django管理界面进行操作。
安装Celery:
pip install celery
下面是一个使用Celery的简单例子。
首先,创建一个Celery实例:
# tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
在这个例子中,我们创建了一个Celery实例,并指定了一个消息代理(这里是Redis)。然后我们定义了一个名为add的任务。
然后,你可以使用这个任务来异步执行:
# 在另一个文件或者脚本中
from tasks import add
result = add.delay(4, 4)
# 你可以使用result.get()来获取结果,但这会阻塞线程,直到任务完成。
# 通常情况下,你应该在生产环境中使用result.get(timeout=True),
# 这样在结果可用之前,会立即返回,而不是阻塞线程。
Celery还支持定时任务和周期性任务,你可以通过配置crontab风格的时间格式来设置。
例如,你可以这样来定时执行任务:
from celery import Celery
from datetime import timedelta
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test() every 10 seconds.
sender.add_periodic_task(10.0, test.s(), name='add every 10')
@app.task
def test():
print("Test")
在这个例子中,我们使用了@app.on_after_configure.connect
装饰器来设置一个定时任务。
最后,启动Celery Worker来执行任务:
celery -A tasks worker --loglevel=info
以上就是一个使用Celery的简单例子。Celery还有很多高级特性和用法,如结合消息队列、数据库等,可以用于更复杂的分布式任务调度。
评论已关闭