我有以下方法调用&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((,但不会进入它。我可以看到打印
" ##########
,但看不到以下印刷品,其他线也不称为
" ##########
请解释此行为。
我在其他答案无济于事的情况下有一些潜在的建议。
首先,您是否让芹菜工人跑步?如果不是这样,任务将排队,但直到工人准备接收任务后才执行。您可以简单地调用该函数(无需.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()
希望这会有所帮助,但是您需要进一步调查该问题的文档。
日志将显示在芹菜的工作日志中,而不是django的标准日志
如果要调试,它具有 @ rdb的外观http://docs.celeryproject.org/en/latest/reference/celery.contrib.rdb.html#usage