ไม่สามารถกำหนดเวลาอะไรใน asyncio (Python 3.7.x)
ฉันกำลังทำงานกับ asyncio กับ python 3.7.x ไม่แน่ใจเกี่ยวกับเวอร์ชันที่แน่นอนตอนนี้ฉันกำลังพยายามกำหนดเวลางาน และฉันไม่สามารถรับผลลัพธ์ได้แม้ว่าจะเรียกใช้สิ่งนี้ตลอดไป นี่คือรหัสที่ฉันมีอยู่ในขณะนี้
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))
สิ่งนี้ทำให้เกิดข้อผิดพลาดต่อไปนี้:
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'
หลังการโทรในcall_later()เป็นprint_now ฉันได้พยายามเพียงprint_nowและprint_now()ฉันยังได้ลองใช้loop.run_forever()แทนloop.run_until_complete() และจนถึงขณะนี้ผมไม่ได้รับอะไร
บางครั้งฉันไม่ได้รับผลลัพธ์หรือข้อผิดพลาดอื่น
คำตอบ
ประการแรกใช่คุณไม่มีdelayข้อโต้แย้ง อันดับแรกควรจะเป็นความล่าช้าในขณะที่อันที่สองคือการโทรกลับ ( เอกสาร )
loop.call_later(delay, callback, *args, context=None)
ประการที่สองการโทรกลับควรเป็นฟังก์ชัน สิ่งที่คุณกำลังผ่านคือซึ่งเป็นจะประเมินprint_now() Noneคุณอาจพบว่า
ไม่สามารถเรียกวัตถุ 'NoneType' ได้
ดังนั้นคุณจะต้องส่งprint_now- โดยไม่ต้องวงเล็บ - เป็นการโทรกลับ วิธีนี้คุณจะส่งผ่านฟังก์ชันแทนที่จะเป็นผลลัพธ์ของแอปพลิเคชัน
ประการที่สามasyncฟังก์ชั่นควรได้รับการawaitแก้ไข สถานการณ์ของคุณดูเหมือนจะไม่ต้องการสิ่งนั้นดังนั้นเพียงแค่วางasyncคำหลักนั้นลง
เมื่อคุณเรียกใช้ฟังก์ชันที่รอได้คุณจะสร้างวัตถุโครูทีนใหม่ รหัสภายในฟังก์ชันจะไม่ทำงานจนกว่าคุณจะรอฟังก์ชั่นหรือเรียกใช้เป็นงาน
จากกระทู้นี้ . คุณอาจต้องการชำระเงิน