我在Django上使用Celery。我有从Web API获取数据的定期任务。然后将结果保存到taskresults模型中的数据库中。
taskresults模型只是将api中的json打包成一个字段,而这不是我所需要的。我可以在任务结果模型中添加字段吗?
我在使用替代方法时遇到了问题,即我正在与模型不同的应用程序中创建模型对象-我一直在django中遇到这样的问题:
raise AppRegistryNotReady("Apps aren't loaded yet.")
我有一个装有模型的核心应用程序,还有一个天气应用程序,这是我的主要应用程序,带有settings.py文件。
我的celery.py在“天气”中,就像这样:
from __future__ import absolute_import, unicode_literals
import requests
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Weather.settings')
from core import views
from Weather.settings import OPEN_WEATHER_API_URL, OPEN_WEATHER_API_KEY
# set the default Django settings module for the 'celery' program.
app = Celery('Weather')
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Gets London weather every hour.
sender.add_periodic_task(10.0, get_weather_task.s(), name='london_weather')
sender.add_periodic_task(3600.0, get_weather_task.s(), name='london_weather')
@app.task()
def get_weather_task():
querystring = {"q": "London,UK"}
headers = {
'x-api-key': OPEN_WEATHER_API_KEY,
}
res = requests.get(OPEN_WEATHER_API_URL, headers=headers, params=querystring).json()
views.create(res)
return res
在此版本中可以看到,我正在尝试在执行MyModel.object.create(...)的视图中调用create函数,但似乎无法正确导入核心模块。