ในการใช้คำร้องขอ (หรือไลบรารีการบล็อกอื่น ๆ ) กับ asyncio คุณสามารถใช้BaseEventLoop.run_in_executorเพื่อรันฟังก์ชันในเธรดอื่นและให้ผลลัพธ์จากมันเพื่อให้ได้ผลลัพธ์ ตัวอย่างเช่น:
import asyncio
import requests
@asyncio.coroutine
def main():
loop = asyncio.get_event_loop()
future1 = loop.run_in_executor(None, requests.get, 'http://www.google.com')
future2 = loop.run_in_executor(None, requests.get, 'http://www.google.co.uk')
response1 = yield from future1
response2 = yield from future2
print(response1.text)
print(response2.text)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
สิ่งนี้จะได้รับคำตอบทั้งสองแบบพร้อมกัน
ด้วย python 3.5 คุณสามารถใช้ new await
/ async
syntax:
import asyncio
import requests
async def main():
loop = asyncio.get_event_loop()
future1 = loop.run_in_executor(None, requests.get, 'http://www.google.com')
future2 = loop.run_in_executor(None, requests.get, 'http://www.google.co.uk')
response1 = await future1
response2 = await future2
print(response1.text)
print(response2.text)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
ดูPEP0492สำหรับข้อมูลเพิ่มเติม
subprocess
เพื่อขนานรหัสของคุณได้