我有一个芹菜工人正在开始一项长期任务(执行该任务的代码是正确的,因为当我在没有芹菜工人的情况下运行时,它会按预期工作)。但是因为我不想等待它,所以我创建了一个包装器来处理我的任务,该任务在 celery 任务中调用该函数。但是,当它运行时,我的 celery worker 窗口中会出现一些非常奇怪的输出(我不会全部粘贴,但它会像这样结束):
00=\x1a\x00\x00\x00\x00\x00\x00tbe]q<(h\x08h\tK\x00\x85U\x01b\x87Rq=(K\x01K\x01\x85h\x0c\x89]q>h\x0fatN\x85\x86bh\x08h\tK\x00\x85U\x01b\x87Rq?(K\x01K\x01\x85h\x0c\x89]q@h7atN\x85\x86be\x87bbu.', datetime.datetime(2013, 8, 12, 14, 18, 7, 234525), None, 16L)
实际输出明显更长,但我不打算在这里全部粘贴。我知道这是一个通用问题,但有没有人看到过这样的输出?此外,任务永远不会改变状态,并且总是被列为PENDING
编辑 如果我以详细的方式运行我的任务,我会看到我应该从我的任务到最后的输出,直到它吐出所有的废话。因为当我按顺序运行时我的任务运行良好,所以我很难相信这是由我的代码引起的(除非有一种特殊的方法可以返回我不知道的字典)
编辑 2 所以我找到了解决问题的方法,但我无法解释这种行为。任何见解将不胜感激。我在芹菜工人中有类似以下的东西
@celery.task
def celery_run():
return task_run()
我能够验证该任务运行良好并提供正确的输出,并且该return
语句导致了问题。但是我只需要结果的某些方面,所以我改为以下
@celery.task
def celery_run():
results = task_run()
needed_stuff = results['stuff']
return needed_stuff
现在它工作正常,我不确定为什么。我应该注意的芹菜返回(数据、格式等)是否有限制?