Bonjour, je m'essaie à Tornado ( http://www.tornadoweb.org ) et j'avais une question concernant les Coroutines.
La doc sur les Coroutines : http://www.tornadoweb.org/en/stable/guide/coroutines.html
D'après la doc, on peut effectuer plusieurs requêtes HTTP en parallèle de cette façon :
@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
Mais pour pouvoir utiliser responses par la suite, je peux ajouter return responses ?
Sachant que j'utilise une seule fois dans mon programme un processus asynchrone, j'appelle la Coroutine de cette façon :
# run_sync() doesn't take arguments, so we must wrap the
# call in a lambda.
IOLoop.current().run_sync(lambda: parallel_fetch_many(googleLinks))
De cette façon, ça démare la IOLoop, exécute la coroutine et stop la IOLoop. C'est correct de faire de la sorte ?
Pour résumer, est-ce que le code suivant est bon ou il faut modifier quelque chose :
@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)
Le code fonctionne mais je ne sais pas si c'est la meilleure façon de faire.
Merci