在将1返回到main函数之前,Perl函数“等待”

时间:2013-11-23 16:27:33

标签: mysql database perl

我有一个Perl脚本,它调用几个从main函数执行MySQL数据库任务的函数。但是,整个脚本太慢了,通过打印日志消息,我调查过它看起来好像只是在将控件返回给main函数之前“等待”。

通过查看MySQL的进程列表,我看到一个带有NULL Info的Sleep进程只是计数 - 直到它正在做某事,Perl函数不会返回main函数,尽管Perl脚本本身已经执行了它的命令,一切都成功了。

示例:

use IO::Handle;
STDERR->autoflush(1);
STDOUT->autoflush(1);

sub SomeFunction{
   // writing into MySQL database
   print localtime()."log2";
   return 1;
}

print localtime()."log1";
&SomeFunction();
print localtime()."log3";

延迟在log2log3之间,在此之前,MySQL的进程列表中有一个Sleep进程。

导致此问题的原因是什么?如何提高此脚本的性能?

1 个答案:

答案 0 :(得分:3)

Perl不会在范围退出时等待任何事情。但退出作用域可能会导致执行任意代码。例如,退出范围可能导致对象被取消引用和销毁,这将涉及调用它们的析构函数。还有other means