问一下, 用 flask 做了一个接口, 接收请求生成一个 shell 任务,任务执行时间会很长, 所以不等待执行完成直接返回请求. 这个应该怎么实现呢? 有什么好的实践吗?

2019-09-05 16:24:57 +08:00
 aieike
5055 次点击
所在节点    Python
29 条回复
sidegem
2019-09-05 16:28:30 +08:00
celery ?
kiwier
2019-09-05 16:30:16 +08:00
发异步任务
aieike
2019-09-05 16:36:26 +08:00
@sidegem 这是个内部的接口, 只会有一个任务执行, 是不是有更简单的方法
aieike
2019-09-05 16:36:38 +08:00
@kiwier 这是个内部的接口, 只会有一个任务执行, 是不是有更简单的方法
daocheng
2019-09-05 16:39:03 +08:00
有,ThreadPoolExecutor
ipwx
2019-09-05 16:41:46 +08:00
你这需求建议用 SimpleHTTPServer 加 threading mixin 不要用 flask
brucedone
2019-09-05 16:43:55 +08:00
用 Process 这个类就可以啦
fifa666
2019-09-05 16:45:07 +08:00
可以用 threading 库啊,用别的线程去执行生成 shell 的代码。
xpresslink
2019-09-05 16:46:11 +08:00
在数据库里面放 2 个表
1 任务表,任务 ID + 任务结果
2 用户消息表
用户请求来了
先在任务表创建一个任务记录拿到任务 ID
开个线程去后台执行 shell 把任务 id 传过去,以便任务完成后按任务 id 把结果填回 任务表,
给用户消息表插条消息,放个链接用任务 id 去任务临时表取结果。
aieike
2019-09-05 17:14:44 +08:00
subprocess 可以生成一个新的进程执行 shell 吗
SmartKeyerror
2019-09-05 17:24:48 +08:00
线程或者进程开出去不就行了
LightLolo
2019-09-05 17:30:10 +08:00
创建一个新的线程去执行 shell 任务,当前线程返回执行完成。
allenwuli
2019-09-05 17:56:25 +08:00
我之前也碰到,我用的 django。业务场景跟你差不多,我后来用了类似 8 楼的方法。我单独开了个进程去查询数据库,没有想到其他的方法。
misaka19000
2019-09-05 18:09:45 +08:00
开个新线程不就可以了,问题在哪?
lolizeppelin
2019-09-05 18:59:08 +08:00
不要开线程去 直接 fork 两次 exec 就完事
你又不关心执行结果 不要开线程
aieike
2019-09-05 19:35:30 +08:00
@lolizeppelin 能说具体些吗?我没太懂, 怎么 fork 两次 exec
labulaka521
2019-09-05 20:09:29 +08:00
flask_rq2 可以说很简单了
clino
2019-09-05 20:23:26 +08:00
用 jenkins 调用
aneureka
2019-09-05 21:29:29 +08:00
@clino 用 rq,轻量级的很好用
aneureka
2019-09-05 21:30:02 +08:00
@clino 不好意思,我莫名其妙就回复到你了…

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

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

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

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

© 2021 V2EX