2015-09-05 44 views
2

如何做到在朱莉娅异步方式如下:如何在Julia中使用回调进行异步Web查询?

JavaScript的十岁上下的伪代码将是:

for i in 1:100 
    asyncCall(get(webpageAddr[i]), callback(err, data){ 
     insertToDB(db, coll, data) 
    }) 
end 

我感兴趣的代码的异步部分应该怎么样子(没有太多的网络查询和数据库访问,我会照顾这些)。这100个查询可以独立运行(异步)彼此以及Julia代码的其余部分。

回答

2

Julia更喜欢以同步方式编写代码,而不会失去并行性的力量,可以这么说。您不必考虑回调。

下面,您将看到@async宏,它仅在本地进程上运行任务(协同程序),并且@sync宏要等待所有封闭任务完成。

@sync begin 
    for i=1:10 
     @async begin 
      println("I mimic the get for $i"); # -> get(webpageAddr[i]) 
      sleep(rand(1:3)) #waiting for server answer at random number of seconds 
      println("I mimic the callback for $i") # -> callback(err, data){insertToDB(db, coll, data} 
     end 
    end 
end 

我鼓励您深入了解Julia中的并行计算的细节,因为这些是巨大的。

+0

真的很棒的答案。谢谢。我特别喜欢你如何模仿“睡眠(rand)”获得的时间,这非常清楚异步的工作方式。 – Ferenc

相关问题