如何在异步中实现if语句称为celery任务?

时间:2019-09-29 22:46:39

标签: python asynchronous flask celery

我是不熟悉烧瓶(芹菜)异步任务的人。我的目标是实现一个异步任务队列。

我有一个Flask Restful API来调用任务。 resource.py看起来像这样:

from flask_restful import Resource, reqparse
from app.tasks import get_data


class Data(Resource):

    def get(self, isin):

        output = get_data.apply_async(args=[isin])

        output_done = output.get()

        return output_done

它将在task.py中调用任务:

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')

@app.task(name='get_data')
def get_data(isin):

    df = pd.read_sql_table("data", engine)

    if isin in df["data"].tolist():
        subset = df[df["data"] == isin].iloc[0]

        output = some_calculation

        return output

    return {'message': 'data not found'}, 404

运行此命令时,由于apply_async总是执行if语句,所以我的问题是如何在异步任务中正确实现if子句?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,

  • 您有一个名为get_data的芹菜任务
  • 您在类Data中定义了一个api
  • 点击此api时,您需要提交任务,并且该任务需要异步运行

现在在任务中

  • 您有if isin in df["data"].tolist():
  • 您的问题是,无论您给isin赋予什么价值,它始终在运行

看着代码,我认为代码没有问题。
数据似乎更像是个问题。

请您共享测试代码所使用的isindf["data"].tolist()的值。