Celery beat schedule runs inaccurately

Viewed 237

Celery runs these tasks erratically. It executes 10 tasks and then it gets stuck, sometimes for a long time. The task only prints a string. There is no reason why this should hang.

celery.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

tasks.py

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

HealthCheckIKEV2.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

Could this occasional delay be explained that the redis database is not on localhost, but is located remotely? The occasional delay happens even at 60 seconds internal.

celery -A notify beat -l info

celery -A notify worker -l info
0 Answers
Related