【问题标题】:Python RQ queueing with JavaScript使用 JavaScript 进行 Python RQ 排队
【发布时间】:2015-06-04 16:24:58
【问题描述】:

我正在尝试使用 JavaScript 对 Python RQ 的任务进行排队。为此,我只是监控了 RQ 对 Redis 的作用。特别是它存储了一个腌制列表,指示在哪里可以找到要运行的任务,包括输入参数等。这里我使用的是 RQ 主页上的示例。存储以下字符串时(腌制列表):

'\x80\x02(X\x1c\x00\x00\x00my_module.count_words_at_urlq\x01NU\x0fhttp://nvie.comq\x02\x85q\x03}q\x04tq\x05.'

对于 JavaScript,它对文字 \x80\x85 做了一些奇怪的事情。它用\xc2\x80\xc2\x85 替换它们,我无法弄清楚为什么以及如何阻止这种行为。字符串的其余部分按预期汇入 Redis。额外的文字会阻碍 rqworker(更具体地说是 pickle)正常运行。

> encodeURI('\x80\x02(X\x1c\x00\x00\x00my_module.count_words_at_urlq\x01NU\x0fhttp://nvie.comq\x02\x85q\x03}q\x04tq\x05.')
'%C2%80%02(X%1C%00%00%00my_module.count_words_at_urlq%01NU%0Fhttp://nvie.comq%02%C2%85q%03%7Dq%04tq%05.'

> decodeURI('\x80\x02(X\x1c\x00\x00\x00my_module.count_words_at_urlq\x01NU\x0fhttp://nvie.comq\x02\x85q\x03}q\x04tq\x05.')
' \u0002(X\u001c\u0000\u0000\u0000my_module.count_words_at_urlq\u0001NU\u000fhttp://nvie.comq \u0002q\u0003}q\u0004tq\u0005.'

我正在使用 node 和 node_redis。

【问题讨论】:

    标签: javascript python node.js utf-8 python-rq


    【解决方案1】:

    我自己发现的。 Python 的 pickle 输出字符串实际上是二进制的,这是在 Python 中写入和读取文件的常用方法。 Javascript 不喜欢这样并“修复”它。解决方案是Javascript的缓冲区。

    > new Buffer('\x80\x85', 'binary')
    <Buffer 80 85>
    

    > new Buffer('\x80\x85')
    <Buffer c2 80 c2 85>
    

    只需向 node_redis 提供缓冲区对象,序列化对象的“正确”表示将出现在 redis 中,并且 rqworker 会按预期工作。请记住,“二进制”模式正在被弃用。

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2017-03-28
      • 2012-09-26
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2018-06-14
      • 2014-07-29
      相关资源
      最近更新 更多