【发布时间】:2022-12-18 17:39:49
【问题描述】:
语境:我在 python 2 中使用 Celery 4.4.0。 我的系统每秒都在做同样的工作。 我使用 Gcloud Kubernetes 部署我的 celery。我有 1 个 Redis pod 作为代理和 2 个 celery 应用程序的副本 pod。 celery pods 是相同的:它们使用相同的代码库和相同的代理。每个 pod 都是一个 beat & worker。
问题:运行几天后,尽管节拍仍然每秒排队任务,但任务不再被触发。 如果我重置 pod,它们将在接下来的几天内正常工作,然后再次陷入同样的困境。
我的代码:
celery worker \
--app scheduler \
--without-mingle \
--without-gossip \
--loglevel=DEBUG \
--queues my_queue \
--concurrency=1 \
--max-tasks-per-child=1 \
--beat \
--pool=solo
app = Celery(fixups=[])
app.conf.update(
CELERYD_HIJACK_ROOT_LOGGER=False,
CELERYD_REDIRECT_STDOUTS=False,
CELERY_TASK_RESULT_EXPIRES=1200,
BROKER_URL='redis://redis.default.svc.cluster.local:6379/0',
BROKER_TRANSPORT='redis',
CELERY_RESULT_BACKEND='redis://redis.default.svc.cluster.local:6379/0',
CELERY_TASK_SERIALIZER='json',
CELERY_ACCEPT_CONTENT=['json'],
CELERYBEAT_SCHEDULE={
'my_task': {
'task': 'tasks.my_task',
'schedule': 1.0, # every 1 sec
'options': {'queue': 'my_queue'},
}
}
)
@task(
name='tasks.my_task',
soft_time_limit=config.ENRCelery.max_soft_time_limit,
time_limit=config.ENRCelery.max_time_limit,
bind=True)
def my_task(self):
print "TRIGGERED"
任务卡住时的日志:
# every second
beat: Waking up now. | beat:633
Scheduler: Sending due task my_task (tasks.my_task) | beat:271
tasks.my_task sent. id->97d7837d-3d8f-4c1f-b30e-d2cac0013531
我认为每个 pod 都有一个 beat 和一个 worker 不是问题,因为我不在乎任务是否被重复触发。那对我来说无所谓。
你有什么线索吗? 任何帮助将不胜感激。先感谢您。
【问题讨论】:
标签: python cron celery schedule worker