Asynchronous 如何在Julia中使用回调进行异步web查询?
如何在Julia中以异步方式执行以下操作: JavaScript-ish伪代码是:Asynchronous 如何在Julia中使用回调进行异步web查询?,asynchronous,web-scraping,julia,Asynchronous,Web Scraping,Julia,如何在Julia中以异步方式执行以下操作: JavaScript-ish伪代码是: for i in 1:100 asyncCall(get(webpageAddr[i]), callback(err, data){ insertToDB(db, coll, data) }) end 我感兴趣的是代码的异步部分应该是什么样子(没有那么多web查询和db访问,我会处理它们)。这100个查询可以彼此独立(异步)运行,也可以独立于Julia代码的其余部分运行。可以说,
for i in 1:100
asyncCall(get(webpageAddr[i]), callback(err, data){
insertToDB(db, coll, data)
})
end
我感兴趣的是代码的异步部分应该是什么样子(没有那么多web查询和db访问,我会处理它们)。这100个查询可以彼此独立(异步)运行,也可以独立于Julia代码的其余部分运行。可以说,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中深入了解并行计算的细节,因为这些内容非常丰富。回答得非常好。谢谢我特别喜欢用
sleep(rand)
模拟get
所需的时间,这使异步的工作原理非常清晰。