python - Celery 参数传递不正确
问题描述
当我试图将一个字符串作为参数传递到我的 celery 文件中时,发生了这个错误:
celery.beat.SchedulingError: Couldn't apply scheduled task add-every-10-seconds: get_data() takes 1 positional argument but 138 were given
但是,我不太明白为什么这意味着 - 我将参数作为 string 传递,但不知何故,Celery 将其转换为 char 数组或其他东西。
|-- data
|-- tasks.py
|-- nttracker
|-- celery.py
|-- manage.py
nttracker\celery.py
from __future__ import absolute_import
app = Celery('nttracker', broker='amqp://', backend='rpc://', include=['nttracker.tasks'])
app.autodiscover_tasks()
app.conf.update(
timezone = "Asia/Taipei",
result_backend = 'django-db',
broker_url = 'redis://127.0.0.1:6379',
cache_backend = 'default',
beat_schedule = {
'test': {
'task': 'data.tasks.get_data',
'schedule': 10.0,
'args': "https://gist.githubusercontent.com/crimsonpython24/8a42e1c7226b73d59dcb2447fa961caa/raw/57441c0912cf51695b113745052c4829459dec02/test.json"
},
}
)
if __name__ == '__main__':
app.start()
数据\芹菜.py
from __future__ import absolute_import
import django
django.setup()
import requests
from celery import Celery
from celery.schedules import crontab
app = Celery()
@app.task
def get_data(url):
r = requests.get(url=url)
data = r.json()
print(data)
有人可以帮忙吗?提前谢谢了。
解决方案
args
应该是一个将被解包的可迭代对象,并且每个元素都作为位置参数传递给任务。
只传递一个字符串会导致整个字符串被解包,并且每个单独的 char 作为参数传递。您应该将字符串包装在元组或列表中
beat_schedule = {
'test': {
'task': 'data.tasks.get_data',
'schedule': 10.0,
'args': ("https://gist.githubusercontent.com/crimsonpython24/8a42e1c7226b73d59dcb2447fa961caa/raw/57441c0912cf51695b113745052c4829459dec02/test.json", )
},
}
推荐阅读
- javascript - 使用 Ajax Timer 每秒在 ASP.net 的头部创建 Javascript 会导致问题
- python - 尝试使用标签从网站获取图像
- javascript - 我不断收到错误“main.js:19 Uncaught TypeError: firebase.database is not a function”
- qt - 如何使 QScrollArea 中 QStackedWidget 的小部件自动调整大小?
- angular - 当任何给定的 observables 发出值时,如何运行 tap 运算符?
- jenkins - Jenkins Pipeline - remoteTriggerJob 始终将状态返回为 Queued 尽管远程作业正在运行和完成
- angular - 在输入中仅显示对象名称 | FormControlName - 角
- android - 使用 OpenGLES 绘制圆形笔划
- neo4j - 如何在单个查询中更新一组节点上的序数属性?
- javascript - 关闭服务器后,Node-Cron 如何跟踪时间?