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.)

贡献者指南