Tài liệu nêu rõ:
@asyncio.coroutine
Decorator để đánh dấu các coroutine dựa trên generator. Điều này cho phép generator sử dụng yield from để gọi các coroutine def async và cũng cho phép generator được gọi bởi các coroutine def async, ví dụ như sử dụng biểu thức await.
_
@types.coroutine(gen_func)
Hàm này chuyển đổi một hàm generator thành một hàm coroutine trả về một coroutine dựa trên generator. Coroutine dựa trên generator vẫn là một trình lặp generator, nhưng cũng được coi là một đối tượng coroutine và có thể chờ đợi. Tuy nhiên, nó không nhất thiết phải triển khai __chờ đợi__()
phương pháp.
Vì vậy, có vẻ như mục đích là giống nhau - đánh dấu một trình tạo là một trình tự con ( định nghĩa không đồng bộ
những gì đã được thực hiện với một số tính năng).
Khi nào sử dụngasyncio.coroutine
Khi nào sử dụngcác loại.coroutine
, sự khác biệt là gì?
Sự khác biệt nằm ở chỗ bạn có báo cáo lợi nhuận hay không. Mã như sau:
từ các loại nhập coroutine như t_coroutine
từ asyncio nhập coroutine như a_coroutine, sure_future, sleep, get_event_loop
@a_coroutine
định nghĩa a_sleep():
print("làm gì đó bất đồng bộ")
năng suất 1
@t_coroutine
định nghĩa t_sleep():
print("làm gì đó trong các loại")
năng suất 1
async def start():
ngủ_a = ngủ_a()
ngủ_t = t_ngủ()
print("Đang đi xuống!")
vòng lặp = get_event_loop()
loop.run_until_complete(bắt đầu())
Trong ví dụ này, mọi thứ đều giống nhau - đây là thông tin gỡ lỗi từ PyCharm (chúng ta đang ở dòng "Sắp ngừng hoạt động!"). Chưa có thông tin nào được in ra trong bảng điều khiển nên chức năng chưa bắt đầu.
NhưngNếu chúng ta loại bỏnăng suất
,các loại
Phiên bản sẽ bắt đầu ngay lập tức!
từ các loại nhập coroutine như t_coroutine
từ asyncio nhập coroutine như a_coroutine, sure_future, sleep, get_event_loop
@a_coroutine
định nghĩa a_sleep():
print("làm gì đó bất đồng bộ")
@t_coroutine
định nghĩa t_sleep():
print("làm gì đó trong các loại")
async def start():
ngủ_a = ngủ_a()
ngủ_t = t_ngủ()
print("Đang đi xuống!")
vòng lặp = get_event_loop()
loop.run_until_complete(bắt đầu())
Bây giờ chúng ta in ra bảng điều khiển làm mọi thứ theo từng loại
. Đây là thông tin gỡ lỗi:
Như bạn có thể thấyBắt đầu ngay sau khi gọi, nếu không có kết quả thì trả về None.
Về cách sử dụng, bạn nên luôn luôn sử dụng không đồng bộ
Phiên bản. Nếu bạn cần thứ gì đó như bắn và quên Chạy nó giống như (chạy ngay lập tức và nhận kết quả sau) - sử dụng đảm bảo tương lai
chức năng.
Tôi là một lập trình viên xuất sắc, rất giỏi!