1

ここで入手できるpython-gearmanライブラリを使用してgearmanの基本的な例を実行しようとしています。私はPython2.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'>

どんな助けでもいただければ幸いです!

ありがとう。

4

2 に答える 2

3

reversed()バイト文字列ではなく、イテレータを返します。代わりに、負のストライドスライストリックを使用してください。

return gearman_job.data[::-1]

これにより、代わりに逆の文字列が返されます。

比較:

>>> reversed('somedata')
<reversed object at 0x100480e50>
>>> 'somedata'[::-1]
'atademos'
于 2012-10-31T12:02:37.457 に答える
0

同様のエラーに直面している他の人のために、workerから文字列を返す必要があります。明示的に返さない場合、または他のタイプのデータを返す場合、scrapyはエラーをスローします。Gearmanのプロトコルがテキストベースであるという理由は単純です。

于 2015-10-08T14:58:11.740 に答える