Lyn*_*ite 6 asynchronous async-await julia array-broadcasting
我正在 Julia 中开发一个 Web-API 访问包,遵循相当标准的 REST。它有很多方法,例如:
post_foo(cred::ServiceCred, x, y)
get_foo(cred::ServiceCred, x, y)
Run Code Online (Sandbox Code Playgroud)
有时我想一次向 API 发布多个内容(或者从中获取多个内容)。假设我有多个y我想要的post_foo
既然我已经做到了Base.broadcastable(cred::ServiceCred) = Ref(cred),我可以做:
post_foo.(cred, "id123", ["a", "b", "c"])
Run Code Online (Sandbox Code Playgroud)
从界面的角度来看,这很有效,而且非常好。我什至可以这样做:
post_foo.(cred, ["id1", "id2", "id3"], ["a", "b", "c"])
Run Code Online (Sandbox Code Playgroud)
使其post_foo(cred, "id1", "a")依次进行等操作。
但因为这些是网络请求,所以我花了很多时间等待返回响应。如果我使用异步处理,它会快得多,因为它会将它们全部发送出去,并且不会阻塞,直到没有任何内容可发送。然后远程服务器将并行处理它们,并将所有响应返回。相当容易做到asyncmap。
但这不太好:
ansyncmap(["a", "b", "c"]) do y
post_foo(cred, "id123", y)
end
Run Code Online (Sandbox Code Playgroud)
于是我开始思考。BroadcastStyle如果我为自己设置一个自定义,ServiceCred使得所有处理都异步解析,然后不会阻塞直到最后,该怎么办?我认为它甚至可能能够颠覆融合机制以进行更复杂的调用,因此如果事情很好地链接在一起,那么一旦输入到达,所有请求都会被触发(但这可能要求有点高)。