可能是我看不到明显的东西,我做错了什么:
func printSize (listOfUrls []string){
var wg sync.WaitGroup
wg.Add(len(listOfUrl))
for _, myurl := range(listOfUrls){
go func(){
body := getUrlBody(myurl)
fmt.Println(len(body))
wg.Done()
}()
}
wg.Wait()
}
如果我删除 wg 并继续,我会正确收到每个 url 正文的大小。如果我像上面那样做,它几乎会立即打印出零。 getUrlBody() 有时需要几分钟才能执行。
回答评论:可以肯定的是,我也以这种方式尝试过,并且它表现出相同的行为。 我发现错误在 getUrlBody 和 main() 函数中...
func printSize(listOfUrls []string) {
var wg sync.WaitGroup
wg.Add(len(listOfUrls))
for _, myurl := range listOfUrls {
go f(myurl, &wg)
}
wg.Wait()
}
func f(myurl string, wg *sync.WaitGroup) {
body := getUrlBody(myurl)
fmt.Println(len(body))
wg.Done()
}
最佳答案
所有的 goroutines 都共享一个 myurl 变量。参见 https://golang.org/doc/faq#closures_and_goroutines获取更多信息。
将代码更改为:
func f(listOfUrls []string){
var wg sync.WaitGroup
wg.Add(len(listOfUrl))
for _, myurl := range(listOfUrls){
go func(myurl string){
body := getUrlBody(myurl)
fmt.Println(len(body))
wg.Done()
}(myurl)
}
wg.Wait()
}
或
func f(listOfUrls []string){
var wg sync.WaitGroup
wg.Add(len(listOfUrl))
for _, myurl := range(listOfUrls){
myurl := myurl
go func(){
body := getUrlBody(myurl)
fmt.Println(len(body))
wg.Done()
}()
}
wg.Wait()
}
关于concurrency - sync.WaitGroup 不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579752/
为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti
我以前多次使用asset_syncgem并取得了很大的成功,但是在Rails4.0.3项目中使用它似乎导致了问题。Assets被上传、散列并gzip到目标目录(我只是使用默认的“Assets”),但是在暂存/生产环境中运行应用程序时,路径不正确。它们的形式是:S3_DOMAIN.com/stylesheets/application.css代替:S3_DOMAIN.com/assets/application-HASH.css有没有人遇到过这个问题?我发现扭转这种行为的唯一方法是将config.assets.compile设置为true,但这在生产环境中行不通。这里是相关的配置文件:#
在多少种语言中,Null不等于Null? 最佳答案 在SQL(作为一种逻辑语言)中就是这样,因为null表示未知/未定义。但是,在编程语言(例如C++或C#)中,空指针/引用是具有特定含义的特定值——没有任何意义。两个无是等价的,但两个未知数不是等价的。造成混淆的原因是两个概念使用了相同的名称(null)。 关于sql-在多少种语言中,Null不等于任何东西,甚至不等于Null?,我们在StackOverflow上找到一个类似的问题: https://stac
time=Time.nowfvalue=time.to_freturntime==Time.at(fvalue)这里有人可以解释为什么上面的表达式返回false吗?如何从与原始时间变量匹配的float创建新的时间对象?谢谢 最佳答案 IEEE754double(由to_f返回)不够准确,无法表示确切时间。t1=Time.nowf1=t1.to_ft2=Time.at(f1)#theylookthesamet1.inspect#=>'2013-09-0923:46:08+0200't2.inspect#=>'2013-09-0923:
我查看了文档,但似乎找不到相关部分。谁能告诉我以下代码中调用sync的目的是什么?fh=Tempfile.new('tmp')fh.sync=true 最佳答案 它设置文件的同步模式。这会影响future的操作并导致在没有block缓冲的情况下写入输出。如果f.tty?为真,也就是说,如果文件连接到类似控制台的设备,则输出不是block缓冲的。但是,当输出到管道或文件时,f.tty?将为false,I/O库将切换到block缓冲,也就是说,将输出累积到一个缓冲区并仅在文件关闭、程序退出或缓冲区已满时写入它。这样速度更快,最终结果相同
我刚开始学习RoR,所以请多多包涵。我正在尝试用字符串编写if或语句。这是我的代码:我尝试了很多其他方法,使用括号和||但似乎没有任何效果。也许是因为我的JS背景......如何测试变量是否不等于字符串一或字符串二? 最佳答案 这是一个基本的逻辑问题:(a!=b)||(a!=c)只要b!=c就永远为真。一旦你记住了bool逻辑(x||y)==!(!x&&!y)然后你就可以从黑暗中找到出路了。(a!=b)||(a!=c)!(!(a!=b)&&!(a!=c))#Convertthe||to&&usingtheidentityexplai
我正在阅读Ruby中的god进程监控框架的源代码,发现了这个STDOUT.sync=true。我以前从未见过这样的事情。请解释它的作用,这一行的意义何在?提前致谢。 最佳答案 通常puts不会立即写入STDOUT,而是在内部缓冲字符串并将输出写入更大的block。这样做是因为IO操作很慢,通常避免将每个字符立即写入控制台更有意义。这种行为在某些情况下会导致问题。假设您想构建一个进度条(运行一个循环,在大量计算之间输出单个点)。缓冲的结果可能是一段时间没有任何输出,然后突然一次打印多个点。要避免这种行为,而是立即写入STDOUT,您可
catalogue关键字一些符号和特殊表示预备知识正文(一)不确定系统的数学表示(二)线性时不变定常系统的LMI稳定性定理(判据)2.1系统模型2.2当u=w=0时系统的LMI稳定性判据2.3.当u=0,w!=0时的保H无穷性能定理(三)多面体模型表示的不确定系统在不同工况下的稳定性定理3.1不确定系统模型的多面体表达式3.2参数无关的鲁棒状态反馈控制率:u=kx3.2.1闭环系统鲁棒稳定性3.2.2闭环系统鲁棒稳定性、保H无穷性能3.3参数相关的鲁棒状态反馈控制率:u=ai*ki*x3.3.1.状态反馈控制下的闭环系统鲁棒稳定性定理(w=0)3.3.2.状态反馈控制下的保H无穷性能、闭环系统
你能在ruby中做到这一点吗?它似乎“错过”了不平等的情况casemyvarwhenmyvar0gosomethingCend 最佳答案 您正在混合两种不同类型的案例陈述:casevarwhen1dosomethingwhen2..3doSomethingElseendcasewhenvar==1doSomethingwhenvar 关于ruby-如何使用不等式的ruby"case...when"?,我们在StackOverflow上找到一个类似的问题:
这是我在我的程序中尝试做的事情的一个更简单的例子,但想法相似。在if语句中,我怎么说不等于?!=是否正确?deftestvara=1varb=2ifvara==1&&varb!=3puts"correct"elseputs"false"endend 最佳答案 是的。在Ruby中,不等于运算符是:!=您可以在此处获得完整的ruby运算符列表:https://www.tutorialspoint.com/ruby/ruby_operators.htm. 关于ruby-你怎么说不等于在Ru