Kể từ Python 3.5, các từ khóa await
và async
được đưa vào ngôn ngữ. Bây giờ, tôi là một người Python 2.7 và tôi đã tránh Python 3 khá lâu nên asyncio
khá mới mẻ đối với tôi. Theo hiểu biết của tôi, có vẻ như await/async
hoạt động rất giống với cách chúng hoạt động trong ES6 (hoặc JavaScript, ES2015, tuy nhiên bạn muốn gọi nó.)Sự khác biệt giữa tương lai trong Python3 và lời hứa trong ES6
Dưới đây là hai kịch bản tôi đã thực hiện để so sánh chúng.
import asyncio
async def countdown(n):
while n > 0:
print(n)
n -= 1
await asyncio.sleep(1)
async def main():
"""Main, executed in an event loop"""
# Creates two countdowns
futures = asyncio.gather(
countdown(3),
countdown(2)
)
# Wait for all of them to finish
await futures
# Exit the app
loop.stop()
loop = asyncio.get_event_loop()
asyncio.ensure_future(main())
loop.run_forever()
function sleep(n){
// ES6 does not provide native sleep method with promise support
return new Promise(res => setTimeout(res, n * 1000));
}
async function countdown(n){
while(n > 0){
console.log(n);
n -= 1;
await sleep(1);
}
}
async function main(){
// Creates two promises
var promises = Promise.all([
countdown(3),
countdown(2)
]);
// Wait for all of them to finish
await promises;
// Cannot stop interpreter's event loop
}
main();
Một điều cần chú ý đó là các mã rất giống nhau và họ làm việc khá nhiều như nhau.
Dưới đây là những câu hỏi:
Trong cả hai Python và ES6,
await/async
được dựa trên máy phát điện. Có đúng không khi nghĩ tương lai giống như lời hứa?Tôi đã thấy các điều khoản
Task
,Future
vàCoroutine
được sử dụng trong tài liệuasyncio
. Sự khác nhau giữa chúng là gì?Tôi có nên bắt đầu viết mã Python luôn có vòng lặp sự kiện đang chạy không?
Đây là một câu trả lời tuyệt vời. –