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)