【问题标题】:Celery task to process data from database Postgres and djangoCelery 任务处理来自数据库 Postgres 和 django 的数据
【发布时间】:2020-06-09 12:45:28
【问题描述】:

我正在尝试使用 celery 和 celery beat 来运行计划任务来处理数据库中的数据,但是当我尝试运行该任务时出现此错误“django.db.utils.OperationalError: FATAL: role”田中“不存在”。计划任务的代码如下所示

settings.py

CELERY_BEAT_SCHEDULE = {
    'task-number-one': {
        'task': 'loans.tasks.update_loan_book',
        'schedule': 60,
    },
}

tasks.py

@shared_task
def update_loan_book():
    tenants = Tenant.objects.all()
    for tenant in tenants:
        #logic to update tenant object

当我使用“celery -A proj worker -l info -B”命令运行任务时,该代码有效,但当我对 celery 和 celery beat 进行守护时,该代码无效。 celery 和 celery beat 的配置文件如下所示。我正在使用supervisord。

[program:projworker]
command=/home/tanaka/microfinance/bin/celery -A cloud_based_microfinance worker -l info
directory=/home/tanaka/Repositories/microfinance_project
user=tanaka
numprocs=1
stdout_logfile=/var/log/celery/proj_worker.log
stderr_logfile=/var/log/celery/proj_worker.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=truepriority=998

[program:projbeat]
command=/home/tanaka/microfinance/bin/celery -A cloud_based_microfinance beat -l info
directory=/home/tanaka/Repositories/microfinance_project
user=tanaka
numprocs=1
stdout_logfile=/var/log/celery/proj_beat.log
stderr_logfile=/var/log/celery/proj_beat.log
autostart=true
autorestart=true
startsecs=10
priority=999

当我尝试将任务作为守护进程运行时,我在 proj_worker.log 文件中收到“django.db.utils.OperationalError: FATAL: role "tanaka" does not exist”。

【问题讨论】:

    标签: django celery supervisord


    【解决方案1】:

    解决了问题,如果您的任务要访问数据库,您首先需要一个数据库连接

    from django.db import connection
    
    @shared_task
    def update_loan_book():
      with connection.cursor() as cursor:
        tenants = Tenant.objects.all()
        for tenant in tenants:
          #logic to update tenant object
    

    Celery 和 django 是两个不同的进程,因此您必须从 django 导入数据库连接,以便 celery 访问数据库。如果您不使用 django ORM,这是一个有用的resource

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2018-12-01
      • 2016-06-25
      • 2012-10-20
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多