【发布时间】:2019-06-06 20:34:56
【问题描述】:
我想在我的网站上显示美元/比特币价格对的当前汇率。 因此我设置了芹菜和一个小的周期性任务。 我目前还不能真正理解我如何调用这个periodic_task 任务或显示它返回的json 数据。
这就是我的 celeter 设置的样子:
__init_.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
芹菜.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py
from celery import Celery
from celery.schedules import crontab
from celery.task import periodic_task
from celery.utils.log import get_task_logger
import requests
logger = get_task_logger(__name__)
app = Celery('tasks', broker='redis://127.0.0.1')
@app.task
def test():
return "Test Successful"
@periodic_task(run_every=(crontab(minute='*/15')), name="get_btc_exchange_rate", ignore_result=True)
def get_exchange_rate():
api_url = "https://api.coinmarketcap.com/v1/ticker/?limit=1"
try:
exchange_rate = requests.get(api_url).json()
logger.info("BTC Exchange rate updated.")
except Exception as e:
print(e)
exchange_rate = dict()
return exchange_rate
我目前正在用这个脚本说明 celery: https://gist.github.com/psych0der/44a8994495abee1b4e832420c1c2974d
所以我的问题是如何触发该periodic_task 并显示json 数据/字段“price_usd”的返回?在模板中
提前致谢
【问题讨论】:
-
回答你问题的第二部分:
exchange_rate[0]['price_usd']将获得 price_usd。但是,您确定 celery 是完成您任务的正确工具吗?如果您不保存费率而只是更新显示,也许可以查看 JS 和 ajax。 -
您好,我最终需要芹菜做很多事情,但首先我必须了解它;)谢谢您的反馈。
-
你说的显示,是指返回给客户端浏览器吗?或者你只是需要它记录在某个地方?
-
如果我能将 price_usd 捕获到数据库字段中,因为某种缓存每 x 分钟刷新一次,那就太棒了
标签: django celery scheduled-tasks