【问题标题】:Error running basic python-gearman example运行基本 python-gearman 示例时出错
【发布时间】:2012-10-31 12:00:38
【问题描述】:

我正在尝试使用here 提供的 python-gearman 库来运行 Gearman 的基本示例。我正在运行 python 2.7.3

工人:

import gearman

gm_worker = gearman.GearmanWorker(['localhost:4730'])

def task_listener_reverse(gearman_worker, gearman_job):
    print 'reporting status'
    return reversed(gearman_job.data)

gm_worker.set_client_id('testclient')
gm_worker.register_task('reverse', task_listener_reverse)
gm_worker.work()

客户:

import gearman

gm_client = gearman.GearmanClient(['localhost:4730'])
print 'Sending job...'
request = gm_client.submit_job('reverse', 'Hello World!')
print "Result: " + request.result

我收到以下错误(完整跟踪可用here

File "/Users/developer/gearman/connection_manager.py", line 27, in _enforce_byte_string
    raise TypeError("Expecting byte string, got %r" % type(given_object))
TypeError: Expecting byte string, got <type 'reversed'>

任何帮助将不胜感激!

谢谢。

【问题讨论】:

    标签: python gearman python-gearman


    【解决方案1】:

    reversed() 返回一个迭代器,而不是一个字节串。改用负步幅切片技巧:

    return gearman_job.data[::-1]
    

    这会返回一个反转的字符串。

    比较:

    >>> reversed('somedata')
    <reversed object at 0x100480e50>
    >>> 'somedata'[::-1]
    'atademos'
    

    【讨论】:

      【解决方案2】:

      为了其他人面临类似的错误,你需要从worker返回一个字符串。如果您没有显式返回或返回任何其他类型的数据,scrapy 会抛出错误。原因很简单,Gearman 的协议是基于文本的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-27
        • 2012-10-08
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多