Mojolicious:长子程序对我的变量没有影响

时间:2018-03-05 13:36:44

标签: perl loops mojolicious hypnotoad

我在使用hypnotoad的非常长的子程序时遇到了一些麻烦。 我需要运行1分钟子程序(硬件连接要求)。

首先,我发现了这种行为:

my $var = 0;
Mojo::IOLoop->recurring(60 => sub {
    $log->debug("starting loop: var: $var");
    if ($var == 0) {
        #...
        #make some long (30 to 50 seconds)   communication with external hardware
        sleep 50; #fake reproduction of this long communication
        $var = 1;
    }
    $log->debug("ending loop: var: $var");
}) 

日志:

14:13:45 2018 [debug] starting loop: var: 0
14:14:26 2018 [debug] ending loop: var: 1 #duration: 41 seconds
14:14:26 2018 [debug] starting loop: var: 0
14:15:08 2018 [debug] ending loop: var: 1 #duration: 42 seconds
14:15:08 2018 [debug] starting loop: var: 0
14:15:49 2018 [debug] ending loop: var: 1 #duration: 42 seconds
14:15:50 2018 [debug] starting loop: var: 0
14:16:31 2018 [debug] ending loop: var: 1 #duration: 41 seconds
...

3个问题:
1)这42秒来自哪里? (是的,我知道,42秒是宇宙的答案......)
2)为什么IOLoop recuring失去了节奏? 3)为什么我的变量被设置为1,仅仅一秒后,if得到一个变量等于0?

当循环作业需要20秒或25秒时,没问题 当循环工作需要60个secondes并与morbo一起使用时,没有问题 当循环作业需要超过40秒并与hypnotoad(1 worker)一起使用时,这是此处解释的行为。

如果我增加“不需要”时间(例如120秒IOLoop 60秒作业,行为总是相同。

这不是IOLoop的问题,我可以在循环外重现相同的行为 我怀疑工人死亡和心脏跳动有问题,但我没有记录。

0 个答案:

没有答案