0

APScheduler (v3.0.0) を使用してデータベース駆動型アプリケーションを作成しています。特に開発中は、後続のスケジュールに影響を与えずに、スケジュールされたジョブを今すぐ実行するように命令したいと思うことがよくあります。

もちろん、ジョブ作成時にこれを行うことは可能です。

def dummy_job(arg):
  pass
sched.add_job(dummy_job, trigger='interval', hours=3, args=(None,))
sched.add_job(dummy_job, trigger=None, args=(None,))

ただし、間隔トリガーまたは日付トリガーを使用してスケジュールされたジョブが既にある場合は...

>>> sched.print_jobs()
Jobstore default:
   job1 (trigger: interval[3:00:00], next run at: 2014-08-19 18:56:48 PDT)

...スケジューラに「今すぐ開始するこのジョブのコピーを作成する」ように伝える良い方法はないようです。sched.reschedule_job(trigger=None)ジョブを今すぐ開始するようにスケジュールしますが既存のトリガーを削除します。

argsまた、ジョブ オブジェクトとその他のステートフル プロパティを保持しながらジョブ オブジェクトを複製する明確で簡単な方法もありません。私が想像しているインターフェースは次のようなものです:

sched.dup_job(id='job1', new_id='job2')
sched.reschedule_job('job2', trigger=None)

get_jobを繰り返し呼び出しても同じオブジェクト (つまり ) が返されないため、明らかに、APScheduler にはジョブ オブジェクトをコピーするための内部メカニズムが既に含まれています(sched.get_job(id) is sched.get_job(id))==False

他の誰かがここで解決策を思いつきましたか? そうでない場合は、開発者のサイトに提案を投稿することを考えています。

4

1 に答える 1