2011-03-20 66 views
0

我的問題是如何連接到MySQL數據庫時可以做些什麼? 爲了說明清楚:可以說,我嘗試連接到一個數據庫:正在載入數據庫?

db = MySQLdb.connect(host = "testhost",user ="testuser", passwd ="testpw", db = "testdb") 

好,事情是,通常,當主機不是本地主機,它通常需要一個位加載,雖然出現這種情況,應用程序「凍結」(我正在使用wxPython)。現在,我想要的是,不是「凍結」,而是顯示代表「加載」的內容,它可以是圖片,文本,無關緊要,而不是凍結。另外,splashscreens呢?就我的嘗試而言,我所做的一切都是在X時間後點擊它時消失的一些閃屏。我真的不知道如何利用它來加載資源,例如MySQL數據庫。上次我試圖用splashscreen加載MySQL數據庫時,它實際上首先加載,然後顯示splashscreen(lol)。 謝謝。

+0

btw,將數據庫設置存儲在配置文件中而不是程序源代碼中。 – jfs 2011-03-20 04:26:49

+0

您可以通過在MySQL配置中使用'skip-name-resolve'並通過IP地址連接到服務器來擺脫延遲。連接應該幾乎是即時的,除非它試圖解析主機名。 – 2011-03-21 15:24:32

回答

2

感謝您的全力幫助,我找到了一個答案,對於wxPython更具體。我遵循這個簡單的例子,使其工作:

import wx 
import thread 
from time import sleep 

class MainFrame(wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.label = wx.StaticText(self, label="Ready") 
     self.btn = wx.Button(self, label="Start") 
     self.gauge = wx.Gauge(self) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.label, proportion=1, flag=wx.EXPAND) 
     sizer.Add(self.btn, proportion=0, flag=wx.EXPAND) 
     sizer.Add(self.gauge, proportion=0, flag=wx.EXPAND) 

     self.SetSizerAndFit(sizer) 

     self.Bind(wx.EVT_BUTTON, self.onButton) 

    def onButton(self, evt): 
     self.btn.Enable(False) 
     self.gauge.SetValue(0) 
     self.label.SetLabel("Running") 
     thread.start_new_thread(self.longRunning,()) 

    def onLongRunDone(self): 
     self.gauge.SetValue(100) 
     self.label.SetLabel("Done") 
     self.btn.Enable(True) 

    def longRunning(self): 
     """This runs in a different thread. Sleep is used to simulate a long running task.""" 
     sleep(3) 
     wx.CallAfter(self.gauge.SetValue, 20) 
     sleep(5) 
     wx.CallAfter(self.gauge.SetValue, 50) 
     sleep(1) 
     wx.CallAfter(self.gauge.SetValue, 70) 
     sleep(10) 
     wx.CallAfter(self.onLongRunDone) 

if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    app.TopWindow = MainFrame(None) 
    app.TopWindow.Show() 
    app.MainLoop() 

從這裏:http://wiki.wxpython.org/LongRunningTasks,希望這有助於:)。

1

如果您的程序需要一次執行兩件事,那麼使用多線程是一種很好的方法。在你的情況下,你有一個GUI,你想保持響應,你有一個數據庫連接到。您需要在單獨的線程中執行數據庫工作,而不是處理GUI事件的線程;這將在連接進行時保持GUI的工作。恐怕我不能告訴你如何在Python中編寫多線程代碼,但我認爲Google是你的朋友。

+0

是的,我只是需要一些想法,我怎麼可以做這樣的事情,所以我感謝您的回覆! – dpswt 2011-03-20 01:27:59