Python 芹菜倒灌

Python 芹菜倒灌,python,python-3.x,celery,Python,Python 3.x,Celery,我启动一个定期更新其状态的任务,并观察结果,但是在调用端的第二个周期后,程序抛出BackLogLimitExceped异常(任务本身在一段时间后成功完成) 主叫方: task = signature("worker.taskname", args=(url, ), queue="worker") g = group(task).apply_async() while not g.ready(): print(g[0].result)

我启动一个定期更新其状态的任务,并观察结果,但是在调用端的第二个周期后,程序抛出BackLogLimitExceped异常(任务本身在一段时间后成功完成)

主叫方:

      task = signature("worker.taskname", args=(url, ), queue="worker")
      g = group(task).apply_async() 
      while not g.ready():
          print(g[0].result)
          time.sleep(5)
任务方:

 with open(filename, "wb") as w:
     fd = stream.open()
     while True:
         data = fd.read(2048)
         if data:
             w.write(data)
             size = w.tell()
             # taskname.update_state(meta={'size': size})
         else:
             break
(如果我评论这一行,一切都很好)

我在Ubuntu 14.04上使用RabbitMQ作为代理和后端。你知道怎么解决这个问题吗

这是准确的stracktrace

Traceback (most recent call last):
  File "main.py", line 55, in <module>
    while not g.ready():
  File "python3.4/site-packages/celery/result.py", line 503, in ready
    return all(result.ready() for result in self.results)
  File "python3.4/site-packages/celery/result.py", line 503, in <genexpr>
    return all(result.ready() for result in self.results)
  File "python3.4/site-packages/celery/result.py", line 259, in ready
    return self.state in self.backend.READY_STATES
  File "python3.4/site-packages/celery/result.py", line 394, in state
    return self._get_task_meta()['status']
  File "python3.4/site-packages/celery/result.py", line 339, in _get_task_meta
    return self._maybe_set_cache(self.backend.get_task_meta(self.id))
  File "python3.4/site-packages/celery/backends/amqp.py", line 180, in get_task_meta
    raise self.BacklogLimitExceeded(task_id)
celery.backends.amqp.BacklogLimitExceeded: 0a4fb653-0f05-48dc-ac43-fb0c8fbaba9a
回溯(最近一次呼叫最后一次):
文件“main.py”,第55行,在
而不是g.ready():
文件“python3.4/site packages/芹菜/result.py”,第503行,在ready中
返回全部(result.ready()作为self.results中的结果)
文件“python3.4/site packages/芹菜/result.py”,第503行,在
返回全部(result.ready()作为self.results中的结果)
文件“python3.4/site packages/芹菜/result.py”,第259行,在ready中
返回self.backend.READY_状态中的self.state
文件“python3.4/site packages/芹菜/result.py”,第394行,处于状态
返回self.\u获取任务\u meta()['status']
文件“python3.4/site packages/celery/result.py”,第339行,在_get_task_meta中
返回self.\u可能\u设置\u缓存(self.backend.get\u任务\u元(self.id))
文件“python3.4/site packages/celery/backends/amqp.py”,第180行,在get_task_meta中
超出提升自我。返回限制(任务id)
芹菜.backends.amqp.backloglimited:0a4fb653-0f05-48dc-ac43-fb0c8fbaba9a

我最近在Redis作为后端时收到了这个错误,并对此进行了深入研究。此错误是由于后端上有1000多条消息,当循环达到此默认限制时,您将收到此错误

有一些旋钮可能会有所帮助,result_expires就是其中之一。您还可以将限制提高到1000以上


你还记得你是否以某种方式解决了这个问题吗?如果是,请添加决议作为接受答案。:)有人在我的系统中遇到了问题。不过,不确定这是否会损害整体功能。如果我能解决这个问题,我会试着回来给出我的答案。我作为经纪人转投了redis,这不是一个真正有价值的答案:)