我正在尝试将此Python2.7代码重写为新的异步世界顺序:
def get_api_results(func, iterable):
    pool = multiprocessing.Pool(5)
    for res in pool.map(func, iterable):
        yield res
Run Code Online (Sandbox Code Playgroud)
map()阻塞直到计算完所有结果,所以我试图将其重写为异步实现,一旦准备就会产生结果.同样map(),返回值必须按照与之相同的顺序返回iterable.我试过这个(我需要requests因为传统的身份验证要求):
import requests
def get(i):
    r = requests.get('https://example.com/api/items/%s' % i)
    return i, r.json()
async def get_api_results():
    loop = asyncio.get_event_loop()
    futures = []
    for n in range(1, 11):
        futures.append(loop.run_in_executor(None, get, n))
    async for f in futures:
        k, v = await f
        yield k, v
for r in get_api_results():
    print(r)
Run Code Online (Sandbox Code Playgroud)
但是使用Python 3.6我得到了:
  File "scratch.py", line 16, in <module>
    for r in …Run Code Online (Sandbox Code Playgroud)