首页 > 解决方案 > 芹菜节拍时间表运行不准确

问题描述

Celery 不规律地运行这些任务。它执行 10 个任务然后卡住,有时卡住很长时间。该任务仅打印一个字符串。这没有理由挂起。

芹菜.py:

from celery import Celery

app = Celery("notify", include=["notify.tasks"])
app.config_from_object("notify.celery_config")

app.conf.beat_schedule = {
    "run-push-every-second": {"task": "notify.tasks.push", "schedule": 1.0}
}

celery_config.py

settings = get_settings()

broker_url = "redis://default:{0}@{1}:{2}/1".format(
    quote(settings.REDIS_PASSWORD, safe=""),
    settings.REDIS_IP,
    settings.REDIS_PORT,
)
task_serializer = "json"
result_serializer = "json"
accept_content = ["json"]
timezone = "Europe/Dublin"
enable_utc = True

任务.py

@app.task
def push():
    print("ice")
    hc = HealthCheckIKEV2()
    hc.report()

健康检查IKEV2.py

class HealthCheckIKEV2:
    def report(self):
        print("nice")
[2021-06-13 17:16:01,485: WARNING/ForkPoolWorker-1] nice
[2021-06-13 17:16:01,485: INFO/ForkPoolWorker-1] Task notify.tasks.push[614503e3-ba64-4ff7-b0c0-34fdd6b6730e] succeeded in 0.0003884739999193698s: None
[2021-06-13 17:16:02,486: WARNING/ForkPoolWorker-1] ice
[2021-06-13 17:16:02,486: WARNING/ForkPoolWorker-1] nice
[2021-06-13 17:16:02,486: INFO/ForkPoolWorker-1] Task notify.tasks.push[a7155eda-ba72-46f8-8055-b95436ba704e] succeeded in 0.0003731990000233054s: None
[2021-06-13 17:16:15,491: WARNING/ForkPoolWorker-1] ice
[2021-06-13 17:16:15,491: WARNING/ForkPoolWorker-1] nice
[2021-06-13 17:16:15,491: INFO/ForkPoolWorker-1] Task notify.tasks.push[444892aa-dd50-4de4-be2b-1bec47d3fd1f] succeeded in 0.0004693000000770553s: None
[2021-06-13 17:16:16,490: WARNING/ForkPoolWorker-1] ice
[2021-06-13 17:16:16,490: WARNING/ForkPoolWorker-1] nice
[2021-06-13 17:16:16,490: INFO/ForkPoolWorker-1] Task notify.tasks.push[8910ee16-35c9-4051-8464-22d0a6c3aa1f] succeeded in 0.0003766750000977481s: None

这种偶尔的延迟是否可以解释为redis数据库不在本地主机上,而是位于远程?即使在内部 60 秒时也会发生偶尔的延迟。

celery -A notify beat -l info

celery -A notify worker -l info

标签: pythonrediscelery

解决方案


推荐阅读