Python 芹菜+;Redis发行

Python 芹菜+;Redis发行,python,redis,celery,Python,Redis,Celery,我有一个应用程序,在我设置芹菜\u ALWAYS\u Earge=False之前,它可以在芹菜中正常工作 # main file jobs = get_report_jobs_from_db() for job in jobs: out = run_job.delay(job) status, id = out.state, out.task_id # Should be status string and UUID. save_job(job, status, id) # reco

我有一个应用程序,在我设置芹菜\u ALWAYS\u Earge=False之前,它可以在芹菜中正常工作

# main file
jobs = get_report_jobs_from_db()

for job in jobs:
    out = run_job.delay(job)

status, id = out.state, out.task_id
# Should be status string and UUID.
save_job(job, status, id) # record to db
# On bad calls status == id and is a UUID.



# celery file
from foo import do_something, write_id_back

@celery.task
def run_job(job):
  id = do_something(job)  # do_something returns a report_id
  write_id_back(job, id) # write that id back to the originating job record

#foo file 

def do_something(job):
    prep_data = prep_job(job)
    report_id = mysql_insert(job, prep_data)
    # A report_id is returned if the insert suceeds otherwise it is
    # null. The INSERT always works if I run 
    # CELERY_ALWAYS_EAGER = True, but if redis is involved it fails
    # routinely
    return report_id

如果我在CELERY\u ALWAYS\u Earge=True下运行代码,绕过redis,我会将所有报表ID重新附加到原始作业。这就是我想要的

然而,一旦我将芹菜\u ALWAYS\u Earge=False设置为False,我会将我所有的报告ID写回,除了3个,它们总是相同的。这三份工作在重要方面是相似的,有别于其他工作

现在,这是我不明白的。如果我洗牌作业列表(即random.shuffle(作业)),我会得到6-8个失败的id写入。这会有所不同

有人能告诉我这里可能发生什么事吗

此外,当我尝试检查失败作业的task_id的状态而不是获取状态字符串(例如“PENDING”、“SUCCESS”)时,我会返回task_id哈希


你知道如何调试这个问题,或者它可能是什么吗?

问题是有多个芹菜实例正在运行

如果您遇到违反常规调查的奇怪芹菜问题,请确保检查芹菜流程:

ps -ef | grep celery

确保您能识别所有这些。在我的例子中,有一个旧的芹菜进程在我忘记的管理器中运行。它只会在某些情况下发生干扰,并且当它在某个神秘位置发生时,会吞掉我的日志尝试。

您能显示更多说明发生了什么的代码和输出吗这就是为什么芹菜为失败的作业返回UUID而不是状态描述字符串的原因?你还没有真正显示输出-你只是在代码中添加了一些注释。用实际输出进行更新,比如说ipython,这正好说明了我很难获得有用的反馈。这是一部分我现在的一个大问题是,为什么芹菜会返回一个任务id,而不是错误条目的AsyncResult中的状态?你没有得到有用的反馈,因为你没有提供有用的信息,你忽略了提供这些信息的请求。