31

私はapschedulerを使用しており、スケジュールされたジョブが起動されたときに呼び出されるハンドラ関数にパラメータを渡そうとしています:

from apscheduler.scheduler import Scheduler
import time

def printit(sometext):
    print "this happens every 5 seconds"
    print sometext

sched = Scheduler()
sched.start()

sometext = "this is a passed message"
sched.add_cron_job(printit(sometext), second="*/5")

while True:
    time.sleep(1)

これを行うと、次のエラーが表示されます。

TypeError: func must be callable

関数ハンドラにパラメータを渡すことは可能ですか。そうでない場合、代替手段はありますか?基本的に、スケジュールされた各ジョブは、スケジュールを作成するときに渡す文字列を返す必要があります。ありがとう!

4

2 に答える 2

35

printit(sometext)呼び出し可能ではなく、呼び出しの結果です。

以下を使用できます。

lambda: printit(sometext)

これは後で呼び出される callable であり、おそらくあなたが望むことを行うでしょう。

于 2012-09-13T18:42:29.423 に答える
33

これは同じ問題が発生したときに最初に見つけた結果であるため、更新された回答を追加しています。

現在の apscheduler (v3.3.0)のドキュメントによると、関数内で関数の引数を渡すことができadd_job()ます。

したがって、OPの場合は次のようになります。

sched.add_job(printit, "cron", [sometext], second="*/5")
于 2016-08-18T21:28:11.457 に答える