Để sử dụng các yêu cầu (hoặc bất kỳ thư viện chặn nào khác) với asyncio, bạn có thể sử dụng BaseEventLoop.run_in_executor để chạy một hàm trong một luồng khác và lấy kết quả từ nó để lấy kết quả. Ví dụ:
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())
Điều này sẽ nhận được cả hai phản ứng song song.
Với python 3.5, bạn có thể sử dụng cú pháp await
/ mới async
:
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())
Xem PEP0492 để biết thêm.
subprocess
để song song mã của mình.