在动态任务中使用芹菜



这里是想法/工作流程:

我有很多网络设备需要与之通信。

a。客户端(flash/python(发送请求:";mac表sw1";到芹菜。

b。芹菜查看可用的工人/任务,如果不存在负责sw1的工人,它将创建一个工人并将作业传递给它。

对sw1的所有后续请求都将自动转发给现有的工作者(从而消除了为每个请求建立会话的情况,并限制了对设备的并发会话(

c。如果工作程序空闲一段时间,它将关闭与设备的连接并退出。

问题:Celery适合这个工作流程吗?你知道我能从类似的工作流程中得到什么想法吗。

谢谢!

如果我理解得很好,您想要实现的目标可以通过为特定作业动态创建队列、选择一个可用的工人并将其订阅到该队列来实现。它还请求一些清除任务,以删除未使用的队列(它可以是每N分钟运行一次的任务,用于检查队列,检查是否有任何正在运行的内容,如果不取消订阅该队列中的工作线程的话(。

可以。

  • 通过传递所需的task_id从Flask端点调用您的芹菜任务(首先查询任务id,如果不存在,则调用该任务(
  • 您可以按照此处所述为"任务"设定时间限制:使用芹菜设置特定任务的时间限制
@app.route('/task', methods=['POST'])
def upload(params):
# query, validate and create new task
do_task.apply_async(do_task, args=(params,), task_id="mac-table-sw1")
@celery.task(bind=True)
def do_task(self, params):
pass
@app.route('/status/<task_id>')
def taskstatus(task_id):
task = extract_keywords_task.AsyncResult("mac-table-sw1")
return task.state