golang 执行长时间的任务的最佳实践是什么?

113 天前
 zhengfan2016

如题,比如使用本地 flux1 模型 生成一张需要等待 30 秒的图片

1.直接 controller 内同步返回,相信 web 框架的并发能力

2.使用 redis 队列 并且增加 POST /task 和 GET /task/:id 两个接口 post task 创建任务,get task 查询任务结果, 但是这样需要拆 api+worker+comfyui 需要跑三个 docker ,服务有点多

3.在 controller 内直接用 channel

3690 次点击
所在节点    Go 编程语言
35 条回复
zhenjiachen
113 天前
正在做异步任务相关的功能,用上了 temporal 来做
ronen
113 天前
@zoharSoul 高版本 redis 也开始支持队列了。 我没见公司有人用,但是看到过介绍
Vaspike
113 天前
第一个不建议, 如果网络波动或者关闭连接或者就会 broken pipe
但最佳方案我也等大佬来解答
Vaspike
113 天前
@Vaspike “或者“客户端中途关闭连接”就会“
k9982874
113 天前
这跟语言无关,楼上已经提过 websocket 了
Keystroke
113 天前
30s 的同步接口?
inframe
113 天前
走 http event stream 下发,类似 ws
fffq
112 天前
sse or ws
koujianshusheng
112 天前
任务状态记录下来比较好,走 mysql 也行啊,搭配上 go 的 for select +子协程 ,再写个回调函数岂不美滋滋
testliyu
112 天前
我这边也有处理长任务的需求,但我这个不需要响应,拷贝 db 的,我做成了 controller 触发内部异步调用
zhengfan2016
112 天前
@zoharSoul 还真是,我 21 年带专毕业就入职 php 公司,后端基本就是 mysql 和 redis 那一套,工作中接触了 vue ,后面读了两年本科,转成了前端,前端行情不好,现在研究 go ,打算转 go 了
czsas
112 天前
temporal
yuwangG
112 天前
hf 早期用的 websocket 现在用的 sse
zoharSoul
112 天前
@zhengfan2016 #31
哈哈 我也是无意中注意到的, 好像只有 php 习惯用 redis 搞队列..
别的 go java 什么的都没有这个习惯
ca2oh4
99 天前
http server push

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

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

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

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

© 2021 V2EX