ไม่สามารถกำหนดเวลาอะไรใน asyncio (Python 3.7.x)

Nov 11 2020

ฉันกำลังทำงานกับ 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() และจนถึงขณะนี้ผมไม่ได้รับอะไร

บางครั้งฉันไม่ได้รับผลลัพธ์หรือข้อผิดพลาดอื่น

คำตอบ

2 Paul Nov 11 2020 at 21:17

ประการแรกใช่คุณไม่มีdelayข้อโต้แย้ง อันดับแรกควรจะเป็นความล่าช้าในขณะที่อันที่สองคือการโทรกลับ ( เอกสาร )

loop.call_later(delay, callback, *args, context=None)

ประการที่สองการโทรกลับควรเป็นฟังก์ชัน สิ่งที่คุณกำลังผ่านคือซึ่งเป็นจะประเมินprint_now() Noneคุณอาจพบว่า

ไม่สามารถเรียกวัตถุ 'NoneType' ได้

ดังนั้นคุณจะต้องส่งprint_now- โดยไม่ต้องวงเล็บ - เป็นการโทรกลับ วิธีนี้คุณจะส่งผ่านฟังก์ชันแทนที่จะเป็นผลลัพธ์ของแอปพลิเคชัน


ประการที่สามasyncฟังก์ชั่นควรได้รับการawaitแก้ไข สถานการณ์ของคุณดูเหมือนจะไม่ต้องการสิ่งนั้นดังนั้นเพียงแค่วางasyncคำหลักนั้นลง

เมื่อคุณเรียกใช้ฟังก์ชันที่รอได้คุณจะสร้างวัตถุโครูทีนใหม่ รหัสภายในฟังก์ชันจะไม่ทำงานจนกว่าคุณจะรอฟังก์ชั่นหรือเรียกใช้เป็นงาน

จากกระทู้นี้ . คุณอาจต้องการชำระเงิน