毎分開始するようにジョブをスケジュールしようとしています。 、私は特定のアクションにスケジュールされたジョブを開始したいAPSchedulerジョブがスケジュールどおりに起動していません。
from scheduler import scheduler
scheduler.start()
:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
executors = {
'default': ThreadPoolExecutor(10),
'processpool': ProcessPoolExecutor(5)
}
job_defaults = {
'coalesce': False,
'max_instances': 5
}
scheduler = BackgroundScheduler(executors=executors,job_defaults=job_defaults)
私はこのようなモジュールの__init__.py
のスケジューラを初期化します。 私はscheduler.py
スクリプト内で定義されたスケジューラを持っています
def AddJob():
dbid = repository.database.GetDbid()
job_id = 'CollectData_{0}'.format(dbid)
scheduler.scheduled_job(func=TestScheduler(),
trigger='interval',
minutes=1,
id=job_id
)
def TestScheduler():
for i in range(0,29):
starttime = time()
print "test"
sleep(1.0 - ((time() - starttime) % 1.0))
まず:私はPythonのコンソールでAddJob()
機能を実行していたときに、それはRに開始し、このようなバックグラウンドではないが、コンソールは、TestScheduler
関数が30秒後に終了するまでブロックされます。私はそれがバックグラウンドスケジューラであるため、バックグラウンドで実行することを期待していました。
秒:1分の繰り返し間隔を指定しても、ジョブは再び開始されません。
私には何が欠けていますか?
UPDATE
私は別のスレッドに問題のおかげで見つけました。間違った行はこれです:
scheduler.scheduled_job(func=TestScheduler(),
trigger='interval',
minutes=1,
id=job_id
)
私はそれを変更:
scheduler.add_job(func=TestScheduler,
trigger='interval',
minutes=1,
id=job_id
)
TestScheduler()TestSchedulerになります。 TestScheduler()を使用すると、関数TestScheduler()の結果がadd_job()の引数として渡されます。
は、私のポストへの解決策を追加しましたあなたの推奨されているように私のinit.pyから)(scheduler.startを削除しました。 scheduler.start() –
グッド おかげで、あなたが好きなら、あなたがこの回答を受け入れることができ@CyrilleMODIANOを知っている:) –
を:scheduler.runningない場合 を: はまた、それが既に実行されている場合、スケジューラの再起動を回避するために句を追加しましたあなたがあなたの答えを訂正すれば、私は@JohnMoutafis –