运行 for 循环中的多个异步任务
Running multiple async tasks in a for loop
我有两个列表:查询和 search_engines。我想获取每个查询并 运行 在其相应的搜索引擎上进行搜索。但是,我想同时执行此操作以节省一些时间。我对异步编程完全陌生,这是我的尝试。我不断收到“RuntimeError:无法从 运行ning 事件循环调用 asyncio.run()”错误。
import asyncio
import time
queries = ['messi', 'ronaldo', 'iniesta', 'xavi', 'ramos']
engines = ['Google', 'Google', 'Bing', 'Duckduckgo', 'Google']
async def get_queries():
for query, engine in zip(queries, engines):
if engine == 'Google':
gtask = asyncio.create_task((google_search.get_domain_description(query)))
await asyncio.sleep(2)
if engine == 'Bing':
btask = asyncio.create_task(print(bing_search.get_domain_description(query)))
await asyncio.sleep(2)
if engine == 'Duckduckgo':
dtask = asyncio.create_task(print(duckduckgo_search.get_domain_description(query)))
await asyncio.sleep(2)
asyncio.run(get_queries())
import asyncio
SEARCH_ENGINES = {
'Google': google_search,
'Bing': bing_search,
'Duckduckgo': duckduckgo_search
}
async def get_query(engine, query):
await SEARCH_ENGINES[engine].get_domain_description(query)
async def main():
queries = ['messi', 'ronaldo', 'iniesta', 'xavi', 'ramos']
engines = ['Google', 'Google', 'Bing', 'Duckduckgo', 'Google']
await asyncio.gather(
*[get_query(engine, query) for query, engine in zip(queries, engines)])
asyncio.run(main())
我有两个列表:查询和 search_engines。我想获取每个查询并 运行 在其相应的搜索引擎上进行搜索。但是,我想同时执行此操作以节省一些时间。我对异步编程完全陌生,这是我的尝试。我不断收到“RuntimeError:无法从 运行ning 事件循环调用 asyncio.run()”错误。
import asyncio
import time
queries = ['messi', 'ronaldo', 'iniesta', 'xavi', 'ramos']
engines = ['Google', 'Google', 'Bing', 'Duckduckgo', 'Google']
async def get_queries():
for query, engine in zip(queries, engines):
if engine == 'Google':
gtask = asyncio.create_task((google_search.get_domain_description(query)))
await asyncio.sleep(2)
if engine == 'Bing':
btask = asyncio.create_task(print(bing_search.get_domain_description(query)))
await asyncio.sleep(2)
if engine == 'Duckduckgo':
dtask = asyncio.create_task(print(duckduckgo_search.get_domain_description(query)))
await asyncio.sleep(2)
asyncio.run(get_queries())
import asyncio
SEARCH_ENGINES = {
'Google': google_search,
'Bing': bing_search,
'Duckduckgo': duckduckgo_search
}
async def get_query(engine, query):
await SEARCH_ENGINES[engine].get_domain_description(query)
async def main():
queries = ['messi', 'ronaldo', 'iniesta', 'xavi', 'ramos']
engines = ['Google', 'Google', 'Bing', 'Duckduckgo', 'Google']
await asyncio.gather(
*[get_query(engine, query) for query, engine in zip(queries, engines)])
asyncio.run(main())