JuliaParallel/Dagger.jl

`@spawn` has confusing move semantics

Open

#357 建立於 2022年9月9日

在 GitHub 查看
 (8 留言) (0 反應) (1 負責人)Julia (86 fork)batch import
documentationeager apienhancementhelp wanted

倉庫指標

Star
 (706 star)
PR 合併指標
 (平均合併 12天 5小時) (30 天內合併 4 個 PR)

描述

Note that

◖◗ Dagger.@spawn single=2 println(myid())
EagerThunk (running)

◖◗       From worker 2:        1
◖◗

◖◗ Dagger.spawn(() -> println(myid()), single=2)
EagerThunk (running)

◖◗       From worker 2:        2

I think what's happening here is that in the former case it is evaluating myid() on process 1 and the function executed on worker 2 is just println(1).

This seems like a problem, it's hard to guess that these examples would be different. I suggest that @spawn should match spawn so that its arguments can be read as if it were the function body passed to spawn. Otherwise I think it will need a lot of documentation.

A stronger argument might be that Distributed.@spawnat already works as I'm suggesting:

◖◗ @spawnat 2 println(myid());

◖◗       From worker 2:        2

(My suggestion is clearly badly breaking at least in principle, so this is tricky.)

貢獻者指南