2012-10-31 4 views
1

python-gearman 라이브러리를 사용할 수있는 gearman의 기본 예제를 실행하려고합니다. here.기본 python-gearman 예제 실행 중 오류가 발생했습니다.

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

어떤 도움 파이썬에게 2.7.3

노동자를 실행하고 감사하겠습니다!

감사합니다.

답변

3

reversed()은 반복자가 아니라 반복자를 반환합니다. 대신 음의 보폭을 사용하십시오.

return gearman_job.data[::-1] 

이 대신 반전 된 문자열이 반환됩니다.

비교 :

유사한 오류가 직면하고 다른 사람을 위해서
>>> reversed('somedata') 
<reversed object at 0x100480e50> 
>>> 'somedata'[::-1] 
'atademos' 
+0

감사합니다. 이 작품! – ducky

0

, 당신은 노동자에서 문자열을 반환해야합니다. 명시 적으로 반환하지 않거나 다른 유형의 데이터를 반환하지 않으면 치료가 오류를 throw합니다. Gearman의 프로토콜이 텍스트 기반이라는 이유는 간단합니다.

관련 문제