【问题标题】:How to make asynchronous web queries with callback in Julia?如何在 Julia 中使用回调进行异步 Web 查询?
【发布时间】:2015-09-05 02:51:12
【问题描述】:

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

类似 JavaScript 的伪代码是:

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

我对代码的异步部分应该是什么样子很感兴趣(没有那么多的网络查询和数据库访问,我会处理这些)。这 100 个查询可以彼此独立(异步)运行,也可以与 Julia 代码的其余部分独立运行。

【问题讨论】:

    标签: asynchronous web-scraping julia


    【解决方案1】:

    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 中的并行计算细节,因为这些内容非常庞大。

    【讨论】:

    • 非常好的答案。谢谢。我特别喜欢你模仿getsleep(rand) 所花费的时间,这让异步的工作原理一目了然。
    猜你喜欢
    • 2011-05-13
    • 2012-01-28
    • 2021-04-23
    • 2014-06-01
    • 2017-09-09
    • 2018-08-22
    • 1970-01-01
    • 2016-10-23
    • 2023-03-24
    相关资源
    最近更新 更多