【问题标题】:How to implement if statements in async called celery tasks?如何在称为 celery 任务的异步中实现 if 语句?
【发布时间】:2019-09-29 22:46:39
【问题描述】:

我是烧瓶(芹菜)异步任务的新手。我的目标是实现一个异步任务队列。

我有一个调用任务的 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子句?

感谢您的帮助!

【问题讨论】:

    标签: python asynchronous flask celery


    【解决方案1】:

    如果我错了,请纠正我,

    • 你有一个名为 get_data 的 celery 任务
    • 你在Data类中定义了一个api
    • 当你点击这个api时,你需要提交任务,它需要异步运行

    现在在任务中,

    • 你有if isin in df["data"].tolist():
    • 你的问题是,不管你给isin 赋予什么价值,它总是在运行

    查看代码,我认为代码没有问题。
    看起来更像是数据的问题。

    您能否分享一下您测试代码时使用的isindf["data"].tolist() 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2013-09-09
      • 2023-01-08
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多