通过Celery中的参数获取运行工

时间:2019-02-04 14:12:30

标签: python django postgresql redis celery

我正在尝试使用Celery(v 3.1.25)进行耗时的计算。我需要通过启动任务时传递的参数让已经运行的工作程序。

客户端将company_id传递给服务器,而Celery使用给定的参数启动worker。可能有许多客户端传递相同的company_id,因此我必须检查该进程是否尚未运行。如果正在运行,则不应计划任务,因为运行同一进程的结果始终相同,我们必须告诉他任务已经在运行。

@celery_app.task(bind=True)
def calculate(self, company_id):
    obj_list = get_objects(company_id)

    for i, obj in enumerate(obj_list):
        self.update_state(state='PROGRESS', meta={'current': i, 'total': len(obj_list)})

        result = calc(
            registry=registry_key,
            company_id=company_id,
        )

    return result

我正在考虑将当前状态存储在Postgres数据库中,该数据库的模型为work_id, status (PROGRESS/SUCCESS), start_time, finish_time。在这种情况下,问题是如何处理工作状态已更改的问题?将此类信息存储在数据库中是否正确? 还有其他解决此问题的方法吗?

我当时在看celery-once,但是没有找到可以告诉我该进程正在运行的方法(我想告诉用户)。

也许我可以对Redis做些什么?

0 个答案:

没有答案