【发布时间】:2015-09-04 17:52:25
【问题描述】:
我有一个注册表单,在提交后,我想通过一些外部 API 执行一些数据验证,然后最终提交到另一个 API。我想异步执行此操作,因此提交者不会等待 10 秒来提交表单。
这是我目前的代码——它可以工作,但如果在任务中抛出异常,用户会收到 500 错误(具体的异常是有时我使用的第三方 API 超时)。我的印象是,如果任务是异步执行的(注意 @task 装饰器并使用延迟来调用任务),那么无论函数中发生什么,都应该会成功加载页面。
views.py
from myapp.tasks import prepare_and_submit_data
def register(request):
form = SignupForm(request.POST or None)
if form.is_valid():
# Async function.
prepare_and_submit_data.delay(form.cleaned_data)
return render(request, 'success.html', {})
return render(request, 'signup.html', {'form': form})
tasks.py
from celery.decorators import task
@task
def prepare_and_submit_data(data):
# do some external API requests and modify data
data = requests.post(BASE_URL, data=data).json()
# ...
使用 try/except 子句包装 prepare_and_submit_data 的内容并记录错误是否是正确的解决方案?还是把函数的调用封装在寄存器中?
谢谢。
【问题讨论】:
标签: python django celery djcelery