Django view 怎样可以先返回结果,再执行一部分其他逻辑?

2020-02-28 13:56:12 +08:00
 btv2bt

除去 Celery 的话,还有其他的办法么?

4485 次点击
所在节点    Django
32 条回复
btv2bt
2020-02-28 15:15:12 +08:00
@wuwukai007 是的啊,所以想问有没其他办法…

是不是换 tornado 就好了……
wuwukai007
2020-02-28 15:36:06 +08:00
曲线一点,用 apscheduler 做异步任务,建张状态表,直接返回前端任务启动成功与否,然后任务里面写状态,前端 api 访问状态,完成后在查表返回结果
xgq89757
2020-02-28 15:40:13 +08:00
@btv2bt django 的 5 大中间件不知道能不能满足你的需求。
btv2bt
2020-02-28 15:52:45 +08:00
@xgq89757 提醒了我,谷歌了一下 django after response,有两种思路:
* 有一个第三方库
* 重载一个 HttpResponse

我试一下去,谢谢啦
robinlovemaggie
2020-02-28 16:01:33 +08:00
参考各大话费充值系统和类银行转账系统的事务模型。
ytymf
2020-02-28 16:50:05 +08:00
不想用 celery,还有 huey,不过也要 redis
xgq89757
2020-02-29 18:22:59 +08:00
@btv2bt 可以用 process_response 这个,django 自带的,执行视图函数结束之后会调用这个
btv2bt
2020-02-29 22:41:06 +08:00
@xgq89757 我试了一下重构 response,但还是会阻塞,用了一个第三方库,没这个问题了;
process response 的话,会阻塞吗
bnm965321
2020-03-12 10:18:37 +08:00
重载 response 会堵塞,因为没有释放这个 server 不能继续接客
btv2bt
2020-03-13 08:04:43 +08:00
@bnm965321 嗯,用了 after response 这个东西,看了下代码应该是有个单独的线程在处理队列里的东西
Vieufoux
2020-06-25 14:42:20 +08:00
@btv2bt 所以楼主最后采用了哪种方案?
btv2bt
2020-06-27 01:18:36 +08:00
@Vieufoux after response 这个第三方库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/648321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX