我有以下方法调用& 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()但不会进入它。我可以看到打印
“##########致电芹菜###########”
但是看不到下面的打印,也没有其他行也没有调用
“##########点击芹菜###########”
请解释一下这种行为。
答案 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