din*_*ino 6 python django decorator django-middleware django-signals
我正在开发一个django网络服务器,另一台机器(具有已知IP)可以将电子表格上传到我的网络服务器.之后的电子表格已经更新,我想触发电子表格上的一些处理/确认/分析(可坐>5分钟---过长其他服务器,以合理的等待响应),然后发送给其他机器(使用已知IP)HttpResponse指示数据处理已完成.
我意识到processing.data()在返回之后你无法做到HttpResponse,但在功能上我希望代码看起来像这样:
# processing.py
def spreadsheet(*args, **kwargs):
print "[robot voice] processing spreadsheet........."
views.finished_processing_spreadsheet()
# views.py
def upload_spreadsheet(request):
print "save the spreadsheet somewhere"
return HttpResponse("started processing spreadsheet")
processing.data()
def finished_processing_spreadsheet():
print "send good news to other server (with known IP)"
Run Code Online (Sandbox Code Playgroud)
我知道如何单独编写每个函数,但是如何processing.data() 在 views.upload_spreadsheet返回响应后有效地调用?
我尝试使用django的request_finished信令框架,但这不会processing.spreadsheet()在返回后触发该方法 HttpResponse.我尝试使用装饰器views.upload_spreadsheet同样的问题.
我有一个想法,这可能与编写中间件或可能是一个基于类的自定义视图有关,我都没有任何经验,所以我想我会向宇宙提出一些问题寻求帮助.
谢谢你的帮助!
事实上,Django 有一个同步模型。如果要进行真正的异步处理,则需要一个消息队列。与 django 一起使用最多的是芹菜,它可能看起来有点“矫枉过正”,但这是一个很好的答案。
我们为什么需要这个?因为在 wsgi 应用程序中,apache 向可执行文件发出请求,并且可执行文件返回文本。只有一次当可执行文件完成执行时,apache 才知道请求的结束。
| 归档时间: |
|
| 查看次数: |
3626 次 |
| 最近记录: |