python - 变量在周期性任务中不更新

标签 python celery

我有一个 django 模型,其中存储分钟和小时

#models.py
HOUR_CHOICES=(
        ('12', '12PM'),
        ('13', '1PM'),
        ('14', '2PM'),
        ('15', '3PM'),
        ('16','4PM'),
        ('17','5PM'),
        ('18','6PM')
                )
class time(models.Model):
        hour = models.CharField(max_length=2,choices=HOUR_CHOICES)
        minute=models.CharField(max_length=100)
        status=models.CharField(max_length=10,choices=STATUS)

#tasks.py
Value=time.objects.all()
for obj in Value:
                minute=obj.minute
                hour=obj.hour

@periodic_task(run_every=crontab(minute=minute, hour=hour), name="newtask")
def newtask():
        f = open("test.txt", "a")
        f.write("test\n")
        f.close()

它工作正常,但是当我更改模型中的小时和分钟时,并没有反射(reflect)在我的任务中,也就是说,如果最初的小时是下午 1 点,分钟 = 30,那么任务将在 13:30 执行,但如果我更改时间到下午 1 点,到 40 分,此时任务不会执行。

最佳答案

问题是,当您更改小时和分钟值时,任务将不会重新注册。对于您的情况,使用 django-celery-beat ( https://github.com/celery/django-celery-beat ) 似乎是理想的选择。使用以下命令安装它 -

pip install django-celery-beat

然后将其包含在您安装的应用程序中 -

INSTALLED_APPS = [
    ...
    'django_celery_beat',
]

迁移 -

python manage.py migrate

更新您的 celery 设置以包含以下内容 -

CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"

现在假设您的任务定义为 -

#tasks.py
from celery import shared_task

@shared_task
def newtask():
        f = open("test.txt", "a")
        f.write("test\n")
        f.close()

在 Django 管理面板中,您现在应该有一个名为“定期任务”的注册模型。您可以添加实例定期任务,以使用定义的 crontab 运行新任务

您需要使用类似这样的命令与您的工作人员一起运行 celerybeat(提供您的应用程序名称来代替“app”)-

celery -A app worker -B -l INFO

这可能有助于开始使用 celerybeat - https://www.merixstudio.com/blog/django-celery-beat/

关于python - 变量在周期性任务中不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56125681/

相关文章:

python - Django 和 Yubikey 集成

python - 无法在 Jython 中导入 Python 函数

python - Celery @task 不适用于实例方法

python - celery vs pyro : is Pyro an alternative to Celery?

python - 使用装饰器将参数传递给 python 函数时出现问题

python - 如何以非矢量化方式计算Python中批量图像的平均值?

Python:如何区分套接字错误和超时?

python - 使用 Django 24 小时后软删除

python - 如何将数据从 ModelForm 保存到 Django 中的数据库?

python - 在 Flask App 中,Celery 应该在哪里实例化?