0
我有一個Perl腳本,它調用幾個執行主函數中MySQL數據庫任務的函數。但是,整個腳本太慢了,通過打印日誌消息,我調查了它看起來好像它只是在將控制權交給主函數之前「等待」。Perl函數「等待」,然後返回1到主函數
通過查看MySQL的進程列表,我看到一個帶有NULL Info的Sleep進程,只需要計數 - 直到它執行某些操作,Perl函數將不會返回到主函數,儘管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";
的延遲是log2
和log3
之間,並且直到這個時候,有在MySQL的PROCESSLIST睡眠過程。
什麼原因導致這種情況,以及如何提高此腳本的性能?
如果這些打印語句被緩衝,你不能從它們中得出任何結論。打印確切的時間,而不僅僅是消息,並打開autoflush。 – Mat
對不起,我忘了提及,當然我使用localtime()連接到消息,並且使用下面的代碼: 'use IO :: Handle; STDERR-> autoflush(1); STDOUT-> autoflush(1);' – martoncsukas
您能否展示一個實際展現此行爲的最小工作示例?請參閱[SSCCE.org](http://sscce.org/)獲取指導。由於你的代碼目前是,它甚至不會編譯('_SomeFunction'與'SomeFunction',''log2;'和'「log3;'錯過結尾引用)。 – amon