概要
ジョブの meta 情報を書き換えます
ジョブの操作は Flask-RQ2 を使っています
環境
- Python 3.11.3
- flask-rq2 18.3
- rq-scheduler 0.13.1
サンプルコード
from flask import Flask, request
from flask_rq2 import RQ
from rq.job import Job
app = Flask(__name__)
app.config["RQ_REDIS_URL"] = "redis://localhost:6379/0"
rq = RQ(app)
def hello():
return "hello"
@app.route("/update")
def update_job():
job_id = request.args["job_id"]
cron_string = request.args.get("cron_string", "*/2 * * * *")
scheduler = rq.get_scheduler(queue="bar")
job = Job.fetch(job_id, connection=scheduler.connection)
job.meta["cron_string"] = cron_string
job.save_meta()
return {"id": job.id, "cron_string": job.meta.get("cron_string")}
@app.route("/")
def get_jobs():
scheduler = rq.get_scheduler(queue="bar")
jobs = scheduler.get_jobs()
return [{"id": job.id, "cron_string": job.meta.get("cron_string")} for job in jobs]
@app.route("/register")
def register_job():
scheduler = rq.get_scheduler(queue="bar")
job = scheduler.cron(
"*/1 * * * *",
func=hello,
args=[],
)
return job.get_id()
update でジョブのメタ情報を更新しています
Job.fetch で job_id を指定して取得しその後 job.meta を更新することで cron 情報を変更することができます
動作確認
- pipenv run rq worker bar
- pipenv run rqscheduler
- pipenv run flask run flask
で各種プロセスを起動しておきます
- curl localhost:5000/register
で一度ジョブを登録し
-
curl "localhost:5000/update?job_id=b6498c8c-f78b-4be6-a3e4-857c663f9d18&cron_string=%2A%2F3+%2A+%2A+%2A+%2A"
で cron 情報を書き換えます
そしてワーカーのログで更新した時間間隔で実行されていることを確認しましょう
念のため redis 側の情報も書き換わっているか確認しましょう
meta のフィールドが cron 情報になります
127.0.0.1:6379> hgetall rq:job:b6498c8c-f78b-4be6-a3e4-857c663f9d18
1) "meta"
2) "\x80\x05\x957\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x0bcron_string\x94\x8c\x0b*/3 * * * *\x94\x8c\x12use_local_timezone\x94\x89u."
3) "timeout"
4) "180"
5) "result_ttl"
6) "-1"
7) "created_at"
8) "2023-08-03T06:20:34.186347Z"
9) "started_at"
10) "2023-08-03T06:54:52.683199Z"
11) "status"
12) "finished"
13) "stopped_callback_name"
14) ""
15) "failure_callback_name"
16) ""
17) "success_callback_name"
18) ""
19) "ended_at"
20) "2023-08-03T06:54:52.801018Z"
21) "data"
22) "x\x9ck`\x9d*\xca\x00\x01\x1a=\x9c\x89\x05\x05z\x19\xa999\xf9S\xfcb\xa7\xd4N)\x99\xa2\a\x00y^\t\x8a"
23) "enqueued_at"
24) "2023-08-03T06:54:52.671411Z"
25) "last_heartbeat"
26) "2023-08-03T06:54:52.801019Z"
27) "description"
28) "app.hello()"
29) "worker_name"
30) "e3bb9dd7b1f544ba9042ea2b1675cc50"
31) "origin"
32) "bar"
最後に
一度登録したジョブでもメタ情報を更新することで実行時間を変更することができました
0 件のコメント:
コメントを投稿