2016-09-24 5 views
0

나는 토네이도를 처음 사용하므로 아래 코드가 문제에 접근하는 올바른 방법인지 또는 더 좋은 것이 있는지 알고 싶었습니다. 그것은 작동하지만 효율성에 대해서는 확신하지 못합니다.토네이도 코 루틴 : 반환 값과 한 번 실행

코드가 내 스크립트의 중간에 문서 here

을 기반으로, 나는 (10 ~ 50) HTTP 요청을 실행해야합니다. 분명히 이렇게 병렬로 수행 할 수 있습니다 :

@gen.coroutine 
def parallel_fetch_many(urls): 
    responses = yield [http_client.fetch(url) for url in urls] 
    # responses is a list of HTTPResponses in the same order 

코 루틴이 완료된 후 어떻게 응답합니까? return responses을 추가 할 수 있습니까?

# run_sync() doesn't take arguments, so we must wrap the 
# call in a lambda. 
IOLoop.current().run_sync(lambda: parallel_fetch_many(googleLinks)) 

그것은이 방법을 수행하는 정확 : 난 단지 내 코드에 한 번 비동기 프로세스를 사용하기 위해 필요로하는 또한, 나는 IOLoop 이런 식으로 시작? 아니면 스크립트의 시작 부분에서 IOLoop을 시작하고 종료해야합니다. 단 한 번만 비동기 프로세스를 사용하기는하지만 말입니다.

기본적으로 제 질문은 다음과 같습니다. 코드가 정확합니까?

@gen.coroutine 
def parallel_fetch_many(urls): 
    responses = yield [http_client.fetch(url) for url in urls] 
    return responses 

googleLinks = [url1,url2,...,urln] 

responses = IOLoop.current().run_sync(lambda:parallel_fetch_many(googleLinks)) 

do_something(responses) 

답변

1

예, 코드가 올바르게 생겼습니다.