2017-03-02 25 views
0

我有一個perl腳本,它調用另一個運行正常數據庫查詢的perl腳本。perl腳本在調用另一個腳本時性能不合適

但有時當內部腳本調用是如此頻繁,那麼它不會在數據庫中插入適當的值,在調試中我發現它無法從插入新的計算值之前最重要的數據庫中獲取所有記錄。我用system()方法來調用子腳本。這將等到孩子的過程結束,但是如果孩子的呼叫頻繁,可能會有什麼不妥。在正常情況下,主腳本將保持30秒,這將導致正確執行子腳本。

任何人都可以有任何建議調試我的代碼或這種問題的任何解決方案。

+0

可能是一個競爭條件,即操作的結果取決於細節調度每個進程或線程。沒有代碼看,這是幾乎不可能診斷。並且您的換檔鑰匙顯示損壞... – Jens

+0

請在適當的地方使用大寫字母。這會讓你的問題更容易閱讀。 – Borodin

回答

1

爲每個DB插入運行Perl腳本是非常無效的。

您應該注意到,Perl將首先編譯調用的腳本(每次調用腳本時) - 因此會產生相當大的開銷。

更好地使用OOP並將DB處理代碼放入單獨的類中 - 它只會在運行時編譯一次。或者您可以使用模塊並將DB代碼放入函數中,它們也只會被編譯一次。看看「使用」雜注。

例如:簡單PROGRAMM與模塊

main_file.pl

use strict; 
use DB_code; 
DB_code::insert($data); 

DB_code.pm

package DB_code; 
use strict; 

sub insert { 
    my $data = shift; 
    print "Your data has been inserted!"; 
} 

1; 
相關問題