首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UnpickleError文档推送到RQ队列时

将UnpickleError文档推送到RQ队列时
EN

Stack Overflow用户
提问于 2014-09-08 19:10:53
回答 1查看 535关注 0票数 0

我从RethinkDB数据库中检索的文档中有一个时间戳(表示为具有特定tzinfo值的rethinkdb.ast.RqlTzinfo类型的Python datetime.datetime对象)。

当将它推送到RQ任务队列时,当任务试图解除时间戳时,我在另一端得到一个UnpickleError。

代码语言:javascript
复制
feeds = r.table('feeds') \
    .filter(lambda feed: feed['last_fetched'] \
        < (r.now() - config.FEED_REFRESH_INTERVAL)) \
    .pluck('id', 'feed_url', 'last_fetched').run(db)

q = Queue('feed_fetcher', connection=Redis())

for feed in feeds:
    print(feed['last_fetched']) # 2014-09-08 18:35:22.735000+00:00
    result = q.enqueue(fetch_feed, feed)

RQ工作者的输出:

代码语言:javascript
复制
18:48:34 *** Listening on feed_fetcher...
19:05:01 feed_fetcher: app.feedupdater.tasks.fetch_feed({u'last_fetched': datetime.datetime(2014, 9, 8, 18, 35, 22, 735000, tzinfo=<rethinkdb.ast.RqlTzinfo object at 0x7fdf508ed410>), u'id': u'ccd57063-a61a-4255-af67-94c244ff6bbb', u'feed_url': u'http://feeds.feedburner.com/hacker-news-feed-200?format=xml'}) (0002de8d-978c-4aeb-944e-2559458d114c)
Traceback (most recent call last):
  File "/usr/local/bin/rqworker", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/rq/scripts/rqworker.py", line 100, in main
    w.work(burst=args.burst)
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 358, in work
    self.execute_job(job)
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 422, in execute_job
    self.main_work_horse(job)
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 457, in main_work_horse
    success = self.perform_job(job)
  File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 473, in perform_job
    job.func_name,
  File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 225, in func_name
    self._unpickle_data()
  File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 193, in _unpickle_data
    self._func_name, self._instance, self._args, self._kwargs = unpickle(self.data)
  File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 50, in unpickle
    raise UnpickleError('Could not unpickle.', pickled_string, e)
rq.exceptions.UnpickleError: (u'Could not unpickle.', TypeError('__init__() takes exactly 2 arguments (1 given)', <class 'rethinkdb.ast.RqlTzinfo'>, ()))

我成功地解决了这个问题,在进入队列之前用一个划时代的时间来替换时间戳,但是这是一种停止间隙解决方案,而且由于在将时区恢复回datetime对象之前必须处理时区等问题,这会使事情变得更加复杂。

问题在哪里(是RethinkDB的RqlTzinfo对象还是RQ的无筛选实现),这是一个合法的错误,还是我糟糕的实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-13 22:44:56

已提交了一个修复程序,并在版本1.15.1中继续存在。这不再是一个问题。见:https://github.com/rethinkdb/rethinkdb/issues/3024

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25731439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档