如何在Julia中以异步方式执行以下操作:
JavaScript-ish伪代码将是:
for i in 1:100
asyncCall(get(webpageAddr[i]), callback(err, data){
insertToDB(db, coll, data)
})
end
我感兴趣的是代码的异步部分应该是什么样的(没有那么多的Web查询和数据库访问,我会照顾那些)。 100个查询可以彼此独立(异步)和Julia代码的其余部分运行。
答案 0 :(得分:2)
朱莉娅更愿意以同步的方式编写代码,而不会失去并行的力量,可以这么说。你不必考虑回调。
下面,您将看到@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中并行计算的细节,因为这些都是巨大的。