V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Latin
V2EX  ›  Go 编程语言

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

  •  
  •   Latin · 2020-08-27 15:19:25 +08:00 · 1849 次点击
    这是一个创建于 1579 天前的主题,其中的信息可能已经有所发展或是发生改变。
    golang 新手请教下在协程中执行死循环任务并调度是否可以实现,没找到太多相关样例
    第 1 条附言  ·  2020-08-27 16:40:55 +08:00
    https://github.com/hybridgroup/gocv/issues/191
    找到了线程不安全的 issue
    14 条回复    2020-08-27 19:31:29 +08:00
    ZSeptember
        1
    ZSeptember  
       2020-08-27 15:41:00 +08:00
    什么意思,for{ // XXX} 不行吗。
    dongisking
        2
    dongisking  
       2020-08-27 15:47:36 +08:00   ❤️ 1
    Latin
        3
    Latin  
    OP
       2020-08-27 15:50:35 +08:00
    @ZSeptember
    解码服务要一直执行,
    相当于一个协程一路解码,
    肯定会阻塞协程,
    刚刚试了几个实现都没成功
    ZSeptember
        4
    ZSeptember  
       2020-08-27 15:53:52 +08:00
    可以多点上下文吧。再什么场景下,要做什么,达成什么样的效果。
    lbp0200
        5
    lbp0200  
       2020-08-27 15:54:39 +08:00
    sync.waitgroup
    chensan
        6
    chensan  
       2020-08-27 16:01:39 +08:00
    不太理解楼主是要什么效果,但是 context 和楼上的 waitgroup 你可以了解下
    Latin
        7
    Latin  
    OP
       2020-08-27 16:09:11 +08:00
    mengzhuo
        8
    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
        9
    Latin  
    OP
       2020-08-27 16:27:19 +08:00
    @mengzhuo 好的 我试试
    lbp0200
        10
    lbp0200  
       2020-08-27 17:42:13 +08:00
    @Latin 看样子是 openCV 的问题,可以写成命令行

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

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

    多视频源,就需要启动多个进程
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:00 · PVG 07:00 · LAX 15:00 · JFK 18:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.