2013-06-25 82 views
-1

我有一個腳本A(python腳本),它打開數據庫並執行一些查詢,然後關閉數據庫連接。在python中存儲數據庫連接?

我不確定腳本A運行多長時間取決於負載。

我有一個其他腳本B(shell腳本),它在while循環中運行腳本A.這意味着腳本A將始終運行。

我的數據庫幾乎使用了我的CPU的100%或更多。我認爲這是因爲反覆打開和關閉連接。

有什麼辦法可以提高性能嗎?

我正在使用MYSQL數據庫,計劃遷移到PostgreSQL。

我想將連接存儲在某個地方,如果它處於活動狀態或創建一個新連接,則使用相同的連接。我不知道該怎麼做?有任何想法嗎?

回答

2

我覺得這是因爲反覆打開和關閉連接。

根據什麼證據?完成任何跟蹤/分析以嘗試追蹤它?

所有的Python解釋器啓動也無濟於事。總體而言,這一切聽起來效率很低。

我個人建議擺脫shell腳本包裝;在同一個Python腳本中執行。在外部循環中連接一次,並在每次內部迭代中重新使用相同的連接。

您無法「保存」連接。當腳本終止時,連接關閉。

您可以使用像PgBouncer這樣的連接池來減少創建和銷燬所有這些連接的開銷,但它不會像在單個腳本中做所有事情那麼好。

+0

這很好,但我想用Python腳本來加載不同的數據。如果我擺脫了shell腳本,那麼我將創建同一個文件的兩個副本,我認爲這不是很有效。 –

+0

@JayakumarBellie Er ...調整Python腳本以獲取*命令行參數*,以便您可以使用薄包裝器中的不同文件名調用它?您不必複製腳本來改變其行爲,您可以使用環境變量,命令行參數,標準輸入等。 –

+0

問題是關於數據庫連接。你將如何管理它? –

0

您可以在腳本B中添加一個邏輯標誌,並且不執行A,除非它已完成上一次運行。一旦啓動腳本A並在最後停用腳本,您可以激活該標誌。這將防止並行重疊和執行A.

+0

執行沒有重疊。 –