GroupResult在Celery中不是JSON可序列化的

时间:2015-04-14 15:42:11

标签: python json celery pyramid

Retrieving GroupResult from taskset_id in Celery?类似。但是之后

tasks.save()

我收到此错误:

Traceback (most recent call last):


File "/home/rodions/pma/pma/pma/controllers/report/cross_site_stock.py", line 270, in report_cross_site_stock_refresh
    tasks.save()
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/celery-3.1.17-py2.7.egg/celery/result.py", line 769, in save
    return (backend or self.app.backend).save_group(self.id, self)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/celery-3.1.17-py2.7.egg/celery/backends/base.py", line 325, in save_group
    return self._save_group(group_id, result)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/celery-3.1.17-py2.7.egg/celery/backends/mongodb.py", line 170, in _save_group
    'result': Binary(self.encode(result)),
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/celery-3.1.17-py2.7.egg/celery/backends/base.py", line 182, in encode
    _, _, payload = dumps(data, serializer=self.serializer)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/kombu-3.0.24-py2.7.egg/kombu/serialization.py", line 164, in dumps
    payload = encoder(data)
  File "/usr/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/kombu-3.0.24-py2.7.egg/kombu/serialization.py", line 59, in _reraise_errors
    reraise(wrapper, wrapper(exc), sys.exc_info()[2])
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/kombu-3.0.24-py2.7.egg/kombu/serialization.py", line 55, in _reraise_errors
    yield
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/kombu-3.0.24-py2.7.egg/kombu/serialization.py", line 164, in dumps
    payload = encoder(data)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/anyjson-0.3.3-py2.7.egg/anyjson/__init__.py", line 141, in dumps
    return implementation.dumps(value)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/anyjson-0.3.3-py2.7.egg/anyjson/__init__.py", line 87, in dumps
    return self._encode(data)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/simplejson-3.6.5-py2.7-linux-x86_64.egg/simplejson/__init__.py", line 370, in dumps
    return _default_encoder.encode(obj)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/simplejson-3.6.5-py2.7-linux-x86_64.egg/simplejson/encoder.py", line 269, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/simplejson-3.6.5-py2.7-linux-x86_64.egg/simplejson/encoder.py", line 348, in iterencode
    return _iterencode(o, 0)
  File "/home/rodions/pma/env/local/lib/python2.7/site-packages/simplejson-3.6.5-py2.7-linux-x86_64.egg/simplejson/encoder.py", line 246, in default
    raise TypeError(repr(o) + " is not JSON serializable")
EncodeError: <GroupResult: 3up2n4tWLihRe2Mx7P7B8Z [b58ae08c-6837-47c1-bf0c-4fb68d032ab4, a9775214-1e7f-4b8d-a57e-b73d76fbff21, bdd2826f-b811-4c68-8e8f-f23d5cada36f]> is not JSON serializable

这是我的代码:

group_tasks = group([save_to_cross_site_stock_report.s(batch, unique_id) for batch in grouper(100, rows, None)])
tasks = group_tasks.apply_async(task_id=unique_id)
tasks.save()

ini文件:

[celery]
CELERY_RESULT_BACKEND = mongodb://localhost:27017/jobs_result
BROKER_URL = mongodb://localhost:27017/jobs
CELERY_ACCEPT_CONTENT = json
CELERY_RESULT_SERIALIZER = json
CELERY_TASK_SERIALIZER = json

我在金字塔中工作并使用pyramid_celery。 我需要在另一个控制器中通过id引用一组任务来检查完成了多少任务。

为什么我收到此错误?它是如何解决的?

0 个答案:

没有答案