如何减少Perl中的等待时间

时间:2019-11-08 07:23:39

标签: perl

我有一个脚本,可以每秒查询数据库多次。

例如,要每小时实现 36,000个查询,我们在脚本中每分钟输入 600个查询 600 x 60 = 36,000

这是我们得到的输出,您可以看到每个查询之间的延迟

{1} [2019-11-06 21:38:01.313]
{1} [2019-11-06 21:38:01.413]
{1} [2019-11-06 21:38:01.513]
{1} [2019-11-06 21:38:01.613]
{1} [2019-11-06 21:38:01.713]
{1} [2019-11-06 21:38:01.813]

我的问题是,因为有等待时间,我们错过了0.0100。

每分钟的费率=不同,我们可以将其更改为每分钟最多960个查询,但我们希望fourmla可以在0-960之间灵活设置。

我的$ wait_time =(1 / $ rpm)* 60 * 1(连接); (最多4个连接)等待时间根据连接数而增加

有人知道如何减少查询之间的等待时间吗?

谢谢

这是代码行

  

我的$ wait_time =(1 / $ rpm)* 60 * 1;

所以当我每分钟输入600个查询

此代码行根据我们拥有的连接数计算等待时间

我的$ wait_time =(1/600)* 60 * 1;

1/600 * 60 * 1 =等待:0.1

2 个答案:

答案 0 :(得分:1)

嗯,您对查询的处理需要时间。如果我能正确地解释您的问题,那么一个脆弱的解决方案是测量当前处理所花费的时间,并从下一个睡眠时间中减去该时间。如果处理时间等于或超过睡眠时间,那当然会中断。

一种干净的解决方案是拥有一个专用的主循环,除了在单独的线程中休眠和触发查询外,什么都不做。

答案 1 :(得分:0)

我不确定这是否会有所帮助,因为我很难理解您的问题。我认为您担心自己的查询速度没有达到期望的水平。

可能是因为您认为等待时间是静态的。 等待时间不是静态的,这取决于上一个查询花费的时间,而间隔是静态的。

use Time::HiRes qw( time sleep );  # Add support for fractional times.

my $interval = (1 / $qpm) * 60 * 1;  # In (fractional) seconds.
my $next_run = time;
while (1) {
   my $wait = $next_run - time;
   sleep($wait) if $wait > 0;
   $next_run += $interval;

   ... do work ...
}