【发布时间】:2017-09-13 07:48:11
【问题描述】:
我有一个 celery 应用程序,它应该运行一个后台进程,这就是它的样子
task = render_image.apply_async(kwargs={
'image': image,
'pos': (x, y),
'deviation': variance,
'switch': switch_color,
'perspective': keep_perspective,
'colors': colors,
'new_color': new_color,
'color': colour,
'area_id': area_id,
'cls_id': cls_id,
'grayscale': grayscale,
'unique_processing_id': unique_processing_id, #line number 394
})
为行号添加了 394
这调用了一个函数render_image,它链接到celery应用程序,看起来像这样
from revamp.celery import app
@app.task(bind=True)
def render_image(image, pos, deviation, switch, perspective, colors, new_color, color, area_id, cls_id, grayscale, unique_processing_id):
...
运行时出现此错误
File "/home/samuel/Documents/code/revamp/gallery/views.py", line 394, in start_render_part
'unique_processing_id': unique_processing_id,
File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 518, in apply_async
check_arguments(*(args or ()), **(kwargs or {}))
TypeError: render_image() got multiple values for keyword argument 'image'
决定我可以将其简化为更多
task = render_image.apply_async(image, (x, y), variance, switch_color, keep_perspective, colors, new_color, colour, area_id, cls_id, grayscale, unique_processing_id)
然后我得到了这个错误
Internal Server Error: /start-render-part
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python2.7/dist-packages/channels/handler.py", line 243, in process_exception_by_middleware
return super(AsgiHandler, self).process_exception_by_middleware(exception, request)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/samuel/Documents/code/revamp/gallery/views.py", line 382, in start_render_part
task = render_image.apply_async(image, (x, y), variance, switch_color, keep_perspective, colors, new_color, colour, area_id, cls_id, grayscale, unique_processing_id)
TypeError: apply_async() takes at most 8 arguments (13 given)
注意到由于这是通过apply_async docs:http://docs.celeryproject.org/en/latest/reference/celery.app.task.html 应该更像这样
task = render_image.apply_async(args={
'image': image,
'pos': (x, y),
'deviation': variance,
'switch': switch_color,
'perspective': keep_perspective,
'colors': colors,
'new_color': new_color,
'color': colour,
'area_id': area_id,
'cls_id': cls_id,
'grayscale': grayscale,
'unique_processing_id': unique_processing_id,
})
但我可能会收到一个缺少参数的错误
Internal Server Error: /start-render-part
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python2.7/dist-packages/channels/handler.py", line 243, in process_exception_by_middleware
return super(AsgiHandler, self).process_exception_by_middleware(exception, request)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/samuel/Documents/code/revamp/gallery/views.py", line 394, in start_render_part
'unique_processing_id': unique_processing_id,
File "/usr/local/lib/python2.7/dist-packages/celery/app/task.py", line 518, in apply_async
check_arguments(*(args or ()), **(kwargs or {}))
TypeError: render_image() takes exactly 12 arguments (13 given)
这让我假设 render_image 需要一个“self”参数。
【问题讨论】:
-
下面我的解决方案似乎还可以??如果您遇到困难,请告诉我
-
通过将 self 添加到 render_image 并保留 kwargs 来修复它,但谢谢
-
我的回答对你来说似乎没问题
-
不改代码不知道能不能工作
标签: python django-celery