2015-06-19 18 views
0

我在寫一個使用Python和金字塔的網絡工具。它使用MySQLdb訪問MySQL數據庫,並根據用戶輸入進行查詢。我爲該工具創建了一個用戶帳戶,併爲其使用的表格授予了讀取權限。從一個網站的多個視圖訪問MySQL

當我在單個選項卡中打開頁面時,它工作正常,但如果我嘗試將其加載到第二個選項卡中,則該頁面將無法加載,直到第一次搜索完成。有沒有辦法解決這個問題,或者我只是試圖錯誤地使用MySQL?

+1

是不是你對MySQL的期望太高了? – Drew

+1

AFAIK所有命令都是一個接一個地執行,因爲用戶是一個。它是萬維網數據。執行速度取決於Web服務器的速度。在前一個命令結束之前,您不能執行另一個命令。金字塔利用一個有趣的內置服務器。試試apache。 –

+0

對,我想要爲每個網站用戶同時訪問。一個共享的MySQL賬戶似乎是一個錯誤的方式來做到這一點。什麼是正確的方式? – ate50eggs

回答

1

@AlexIvanov試圖說的是,當您在控制檯中啓動Pyramid應用程序時,它會使用Pyramid的內置開發服務器提供服務。這個服務器是單線程的,並且一個接一個地提供請求,所以如果你有一個需要15秒的長請求 - 你將無法在另一個選項卡中使用你的應用程序,直到這個長請求完成。內置網絡服務器的這種連續性實際上是一個非常棒的功能,它極大地簡化了調試。

在製作中,您的金字塔應用程序通常由「真實」網絡服務器提供服務,例如Apache或Nginx。這樣的網絡服務器通常產生多個「工作者」,或者使用多個線程來允許他們服務多個併發請求。

所以我懷疑你的設置沒有問題(假設你沒有對Pyramid最初的腳手架做任何特別的事情,它仍然使用配置了ZopeTransactionExtension等的SQLAlchemy的會話)。

「單一共享MySQL帳戶」絕不會阻止多個連接的客戶端在MySQL中同時運行查詢 - 事實是,開發服務器只有一個單線程客戶端。

+1

並且檢查它與MySQL無關的最好方法是在視圖中添加長時間休眠(根本不需要數據庫操作)並同時觸發2個請求。 – matino

+1

嗯 - 它不。它使用服務員,並處理同時請求罰款。只有睡眠(10)的視圖可以同時處理多個請求,而不會有任何問題。 – MatsLindh

+0

感謝您的洞察力。這個問題是我對Pyramid dev服務器的誤解,而不是MySQL的限制。當我與女服務員部署時,它工作。我發現這有用: http://docs.pylonsproject.org/projects/pyramid//en/latest/narr/project.html – ate50eggs