错误运行基本Python-Gearman示例



我正在尝试使用此处可用的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

我收到以下错误(此处可用的完整跟踪)

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'>

任何帮助将不胜感激!

谢谢。

reversed()返回迭代器,而不是bytestring。改用负面切片切片技巧:

return gearman_job.data[::-1]

这将返回反向字符串。

比较:

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

为了其他人面临类似错误的人,您需要从工作人员返回字符串。如果您不明确返回或返回任何其他类型的数据,则零工会丢失错误。理由很简单,因为Gearman的协议是基于文本的。

相关内容

  • 没有找到相关文章

最新更新