我想在延迟之后向进程发送消息并发现erlang:send_after/4
.
在查看文档时,它看起来就像我想要的那样:
erlang:send_after(Time, Dest, Msg, Options) -> TimerRef
启动计时器.当计时器到期时,消息Msg被发送到由Dest标识的进程.
但是,当目标在另一个节点上运行时它似乎不起作用 - 它告诉我其中一个参数是坏的.
1> P = spawn('node@host', module, function, [Arg]).
<10585.83.0>
2> erlang:send_after(1000, P, {123}).
** exception error: bad argument
in function erlang:send_after/3
called as erlang:send_after(1000,<10585.83.0>,{123})
Run Code Online (Sandbox Code Playgroud)
做同样的事timer:send_after/3
似乎工作正常:
1> P = spawn('node@host', module, function, [Arg]).
<10101.10.0>
2> timer:send_after(1000, P, {123}).
{ok,{-576458842589535,#Ref<0.1843049418.1937244161.31646>}}
Run Code Online (Sandbox Code Playgroud)
而且,文档的timer:send_after/3
状态几乎是同样的事情erlang
版本:
send_after(Time, Pid, Message) -> {ok, TRef} | {error, Reason}
评估Pid!时间毫秒后的消息.
所以问题是,为什么这两个函数在表面上做同样的事情时表现不同?被erlang:send_after
打破,或错误广告?或者可能timer:send_after
没有做我认为的事情?
ModelingToolkit.jl
这是一个非常棒的软件包,以至于我经常对它抱有过高的期望。例如,我经常发现自己的模型可归结为以下内容:
@variables t x(t) y(t)
@parameters a b C
d = Differential(t)
eqs = [
d(x) ~ a * y - b * x,
d(y) ~ b * x - a * y,
0 ~ x + y - C
]
@named sys = ODESystem(eqs)
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以通过替换 来将其简化为一个方程0 ~ x + y - C
。但实际上,我的系统要大得多、不那么琐碎并且是通过编程生成的,所以我想ModelingToolkit.jl
为我自己做这件事。
我尝试过使用structural_simplify
,但额外的方程会妨碍:
julia> structural_simplify(sys)
ERROR: ExtraEquationsSystemException: The system is unbalanced. There are 2 highest order derivative variables and …
Run Code Online (Sandbox Code Playgroud) 如果我评估如下:
numpy.random.choice(2, size=100000, p=[0.01, 0.99])
使用一个均匀分布的随机数float
,例如r
,并决定是否r < 0.01
会浪费许多生成的随机位(熵)。我听说(二手)生成伪随机数的计算成本很高,所以我认为numpy
不会这样做,而是会在这种情况下使用算术编码之类的方案。
然而,乍一看似乎确实为它所要求的每个样本choice
生成了一个。float
此外,快速timeit
实验表明,生成均匀浮点数实际上比 中的样本n
更快。n
p=[0.01, 0.99]
>>> timeit.timeit(lambda : numpy.random.choice(2, size=100000, p=[0.01, 0.99]), number=1000)
1.74494537999999
>>> timeit.timeit(lambda : numpy.random.random(size=100000), number=1000)
0.8165735180009506
Run Code Online (Sandbox Code Playgroud)
真的会像看起来那样为每个样本choice
生成一个吗?在某些情况下(特别是当数据很大且分布不均匀时),float
使用某种压缩算法不会显着提高性能吗?如果没有,为什么不呢?size
p
erlang ×1
erlang-otp ×1
julia ×1
modeling ×1
numpy ×1
performance ×1
python ×1
python-3.x ×1
random ×1