Asynchronous 如何在Julia中使用回调进行异步web查询?

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代码的其余部分运行。可以说,

如何在Julia中以异步方式执行以下操作:

JavaScript-ish伪代码是:

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
所需的时间,这使异步的工作原理非常清晰。