Không thể lên lịch bất cứ điều gì trong asyncio. (Python 3.7.x)
Tôi hiện đang làm việc trên asyncio với python 3.7.x, không chắc chắn về phiên bản chính xác, ngay bây giờ tôi đang cố gắng lên lịch tác vụ. Và tôi không thể nhận được đầu ra, ngay cả khi chạy nó mãi mãi. Đây là mã tôi hiện có
import asyncio
async def print_now():
print("Hi there")
loop = asyncio.get_event_loop()
loop.call_later(print_now())
loop.run_until_complete(asyncio.sleep(1))
Điều này gây ra lỗi sau:
Traceback (most recent call last):
File "D:\Coding\python\async\main.py", line 7, in <module>
loop.call_later(print_now())
TypeError: call_later() missing 1 required positional argument: 'callback'
Cuộc gọi lại call_later()là print_now tôi vừa thử print_nowvà print_now()tôi cũng đã thử sử dụng loop.run_forever()thay vì loop.run_until_complete() và cho đến nay tôi không nhận được gì
Đôi khi tôi nhận được hoặc không có đầu ra hoặc một lỗi khác.
Trả lời
Đầu tiên, có, bạn đang thiếu một delaylập luận. Cái đầu tiên được cho là độ trễ trong khi cái thứ hai là cuộc gọi lại ( tài liệu ).
loop.call_later(delay, callback, *args, context=None)
Thứ hai, cuộc gọi lại được cho là một hàm. Những gì bạn đang vượt qua là print_now()những gì sẽ được đánh giá None. Bạn có thể tìm ra rằng
Đối tượng 'NoneType' không thể gọi được
Vì vậy, bạn sẽ cần phải chuyển print_now- không có dấu ngoặc đơn - như một lệnh gọi lại. Bằng cách này, bạn đang chuyển một hàm thay vì kết quả của ứng dụng của nó.
Thứ ba, các asyncchức năng phải được chỉnh sửa await. Kịch bản của bạn dường như không cần điều đó, vì vậy chỉ cần bỏ asynctừ khóa.
Khi bạn gọi một hàm có thể chờ, bạn tạo một đối tượng đăng quang mới. Mã bên trong hàm sẽ không chạy cho đến khi bạn đợi hàm hoặc chạy nó như một tác vụ
Từ bài đăng này . Bạn có thể muốn kiểm tra