สมมติว่าเรามีฟังก์ชันดัมมี่:
async def foo(arg):
    result = await some_remote_call(arg)
    return result.upper()
อะไรคือความแตกต่างระหว่าง:
import asyncio    
coros = []
for i in range(5):
    coros.append(foo(i))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(coros))
และ:
import asyncio
futures = []
for i in range(5):
    futures.append(asyncio.ensure_future(foo(i)))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))
บันทึก : ตัวอย่างส่งคืนผลลัพธ์ แต่นี่ไม่ใช่จุดสำคัญของคำถาม เมื่อค่าตอบแทนเรื่องการใช้งานแทนgather()wait()
โดยไม่คำนึงถึงค่าตอบแทน, ensure_future()ฉันกำลังมองหาเพื่อความชัดเจนในการwait(coros)และwait(futures)ทั้งสองเรียกใช้โครูทีนดังนั้นเมื่อใดและทำไมจึงควรพันโครูทีนensure_future?
โดยพื้นฐานแล้ววิธีที่ถูกต้อง (tm) ในการเรียกใช้การดำเนินการที่ไม่บล็อกโดยใช้ Python 3.5 คือasyncอะไร?
หากต้องการรับเครดิตพิเศษจะต้องทำอย่างไรหากต้องการโทรเป็นกลุ่ม เช่นต้องโทรsome_remote_call(...) 1,000 ครั้ง แต่ฉันไม่ต้องการทำลายเว็บเซิร์ฟเวอร์ / ฐานข้อมูล / ฯลฯ ด้วยการเชื่อมต่อพร้อมกัน 1,000 ครั้ง สิ่งนี้ทำได้ด้วยเธรดหรือพูลกระบวนการ แต่มีวิธีดำเนินการด้วยasyncioหรือไม่?
การอัปเดตปี 2020 (Python 3.7+) : อย่าใช้ข้อมูลโค้ดเหล่านี้ ใช้แทน:
import asyncio
async def do_something_async():
    tasks = []
    for i in range(5):
        tasks.append(asyncio.create_task(foo(i)))
    await asyncio.gather(*tasks)
def do_something():
    asyncio.run(do_something_async)
ลองพิจารณาใช้Trioซึ่งเป็นทางเลือกของบุคคลที่สามที่มีประสิทธิภาพแทน asyncio
ensure_future()หรือไม่? และถ้าฉันต้องการผลลัพธ์ฉันจะใช้run_until_complete(gather(coros))ไม่ได้หรือ?