asyncioで何もスケジュールできません。(Python 3.7.x)
私は現在、Python 3.7.xでasyncioに取り組んでおり、正確なバージョンがわかりません。現在、タスクをスケジュールしようとしています。そして、それを永久に実行しても、出力を取得できません。これが私が現在持っているコードです
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引数がありません。最初のものは遅延であり、2番目のものはコールバックであると想定されています(docs)。
loop.call_later(delay, callback, *args, context=None)
第二に、コールバックは関数であると想定されています。あなたが渡しているのは、print_now()どちらが評価されるかNoneです。あなたはそれを見つけるかもしれません
'NoneType'オブジェクトは呼び出せません
したがってprint_now、コールバックとして(括弧なしで)渡す必要があります。このようにして、アプリケーションの結果ではなく関数を渡します。
第三に、async機能はawait編集されることになっています。あなたのシナリオはそれを必要としないようです、それでただasyncキーワードを落としてください。
待機可能な関数を呼び出すと、新しいコルーチンオブジェクトが作成されます。関数内のコードは、関数を待つか、タスクとして実行するまで実行されません。
この投稿から。あなたはチェックアウトしたいかもしれません