redis支持的轻量级异步作业队列。
elon的Python项目详细描述
埃隆
elon是一个由redis支持的轻量级异步作业队列。
为什么叫这个名字?
因为埃隆·马斯克能把事情办好。
它是干什么的?
假设您有一个django或flask应用程序,它严重依赖于网络或io。假设在这个应用程序中,您有一个视图,它会发出一个缓慢的后端api调用。当用户访问此视图时,您的web工作者将被捆绑,直到api响应,这将严重限制您的吞吐量。在某些情况下,您必须等待api的响应生成您的响应(在这种情况下,我建议使用tornado),但在其他情况下,您可能不需要立即响应,在这种情况下,elon非常适合您的情况。
示例
这里有一个长时间运行的任务——假设它不是等待10秒,而是实际命中了一个后端API。
importtimedeflong_api_request():time.sleep(10)
我们可以使用elon将其重写为异步任务:
importasynciofromtasklibimporttask@taskasyncdeflong_api_request():awaitasyncio.sleep(10)
在调用任务时,请在以下时间之前:
@app.route('/enqueue_task')defenqueue_task():# Runs the task and returns once it is complete.long_running_process()return'Success!'
之后:
@app.route('/enqueue_task')defenqueue_task():# Enqueue the task and return instantly.long_running_process.enqueue()return'Success!'
当您对任务调用enqueue()
时,您将立即收到一个uuid,您可以使用它查询结果并查看作业进度。
装饰类:
也可以修饰类,只要它们继承自Task
。示例:
classComplexTask(Task):defexecute(self):pass
从任务继承的类必须定义自己的execute
方法-这是实际调用任务的方法。