2012-06-08 59 views
1

我正在開發一個應用程序與bottlepy框架。我正在使用標準庫WSGIRefServer()來運行開發服務器。它是一個單線程服務器。Python:從開發服務器移動到生產服務器

現在,當進入生產階段時,我會轉向一個多線程生產服務器,並且有很多選擇。假設我選擇CherryPy。

現在,在我的代碼中,我正在初始化一個wsgi應用程序。除此之外,我還初始化其他事情......

  • Memcached的連接
  • Mako的模板
  • MongoDB的連接

由於標準庫wsgiref是一個單線程的服務器,我只創建一個wsgi應用程序(wsgi可調用),一切正常。

我想知道的是,當我轉移到多線程服務器時,我的wsgi應用程序,初始化代碼,連接到不同服務器等的行爲會如何。

  • 多線程服務器會爲每個線程創建一個單獨的wsgi應用程序實例嗎?並且會爲每個新請求產生一個新線程(這意味着每個請求都有一個新的wsgi應用程序)?

  • 我與memcached,mongoDB等的連接是否可以跨線程共享。還有什麼會在線程之間共享

  • 請解釋請求 - 響應週期的螺紋服務器

回答

1

在一般應用程序正在使用WSGI兼容的框架,你不應該害怕多線程的/單線程服務器端。它意味着透明,並且必須以同樣的方式做出反應,儘管它是什麼類型的服務器,只要它符合wsgi。

bottle.run()之前的每個代碼塊只能運行一次。因此,每個連接(數據庫,memcached)將僅實例化一次並共享。

當你打電話給bottle.run()瓶頸啓動wsgi服務器爲你。對該服務器的每個請求都會引發一些wsgi可調用的內部框架。如果它是單線程或多線程的環境,只要你不做一些奇怪的事情,你並不感興趣。

對於奇怪的我的意思是通過全局變量同步某些東西。 (這裏的例外是全球性的request對象,爲了確保它在適當的上下文中包含正確的請求,它是瓶頸)。

並且響應列表中的第一個問題:可以在線程池中新產生的線程或線程中計算請求(CherryPy是線程池化的)

相關問題