golang 在 routine 中执行阻塞任务可以实现吗?

2020-08-27 15:19:25 +08:00
 Latin
golang 新手请教下在协程中执行死循环任务并调度是否可以实现,没找到太多相关样例
1835 次点击
所在节点    Go 编程语言
14 条回复
ZSeptember
2020-08-27 15:41:00 +08:00
什么意思,for{ // XXX} 不行吗。
dongisking
2020-08-27 15:47:36 +08:00
Latin
2020-08-27 15:50:35 +08:00
@ZSeptember
解码服务要一直执行,
相当于一个协程一路解码,
肯定会阻塞协程,
刚刚试了几个实现都没成功
ZSeptember
2020-08-27 15:53:52 +08:00
可以多点上下文吧。再什么场景下,要做什么,达成什么样的效果。
lbp0200
2020-08-27 15:54:39 +08:00
sync.waitgroup
chensan
2020-08-27 16:01:39 +08:00
不太理解楼主是要什么效果,但是 context 和楼上的 waitgroup 你可以了解下
Latin
2020-08-27 16:09:11 +08:00
mengzhuo
2020-08-27 16:15:57 +08:00
这样?


ch := make(chan, int)

go func() {

for i:=0;i<10;i++{
ch<-i
time.Sleep(i*500*time.Millisecond)
}

}()

for {
fmt.Print(<-ch)
}
Latin
2020-08-27 16:27:19 +08:00
@mengzhuo 好的 我试试
lbp0200
2020-08-27 17:42:13 +08:00
@Latin 看样子是 openCV 的问题,可以写成命令行

cap rtsp://xxx1
cap rtsp://xxx2
cap rtsp://xxx3

这样都是独立的进程,应该就没问题了
ZSeptember
2020-08-27 18:21:33 +08:00
defer wg.Done() 加到第七行前面,wg.Done 应该要在 goroutine 结束后执行吧。
Latin
2020-08-27 18:23:45 +08:00
@lbp0200 gocv 线程不安全 这个方法我觉得可以放弃了
@ZSeptember 阻塞可以直接放弃 Done 了吧
ZSeptember
2020-08-27 18:42:23 +08:00
打个日志看看你真实代码传入的 url 列表?感觉运行的时候是个空列表?
lbp0200
2020-08-27 19:31:29 +08:00
@Latin gocv 有示例代码,复制粘贴就好了

多视频源,就需要启动多个进程

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

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

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

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

© 2021 V2EX