Celery任务方法没有被调用

时间:2018-03-30 11:58:33

标签: python django celery

我有以下方法调用& Python Django Web应用程序中的特定方法。 (请注意,我对python,Django或芹菜并不熟悉)

方法如下:

@shared_task(bind=True, default_retry_delay=10, max_retries=3, ignore_results=False)
def push_sns_message(self, sns_alias, message, target_arn):
    """
    Celery task
    """
    logger.debug("########## Hit the Celery Task ###############")
    print "########## Hit the celery ###########"
    connection = sns_connections[sns_alias]
    return connection.publish(message=message, target_arn=target_arn) 

方法调用如下:

print "########## Calling to celery ###########"
push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn)

问题是每当我运行应用程序时,它都来自push_sns_message.s()但不会进入它。我可以看到打印

  

“##########致电芹菜###########”

但是看不到下面的打印,也没有其他行也没有调用

  

“##########点击芹菜###########”

请解释一下这种行为。

2 个答案:

答案 0 :(得分:2)

如果其他答案没有帮助,我会提出一些可能的建议。

首先,你有芹菜工人跑?如果不是,则任务将排队,但在工作人员准备好接收任务之前不会执行。你可以简单地调用函数(没有.s),函数应该作为常规函数执行。

其次,“。s”是一个签名,但实际上没有“apply_async”就被调用。尝试调用这样的函数:

push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn).apply_async()

或者像这样:

push_sns_message.s(self.sns_connection, json.dumps(wrapper[0]), self.sns_arn).delay()

希望这会有所帮助,但这是您需要进一步调查此问题的documentation

答案 1 :(得分:0)

日志将显示在芹菜的工作日志中,而不是在django的标准日志中

如果要调试,请查看@ rdb for celery http://docs.celeryproject.org/en/latest/reference/celery.contrib.rdb.html#usage