2017-03-21 87 views
0

我正在開發一個Web應用程序,其中包含可能需要很長時間才能完成的服務/任務。我是python的新手,並且讀到python有GIL,這意味着一次只有一個線程可以運行而不管核的數量。使用燒瓶網絡應用程序中的線程

我的僞代碼是這樣的

def service_xxx(self, data): 
    thread = ThreadXXX(data) 
    thread.start() 
    self.threads[data.id] = thread 

我的問題是,當100級的請求來會發生什麼?燒瓶框架將使用所有內核並行運行100個用戶線程,還是要在單個內核上運行100個線程?

+0

你沒有100個核心,是嗎? –

+0

現在嚴重。 GIL是我個人在需要併發時不依賴線程的原因。我更喜歡多處理。有關更多信息,請參閱http://stackoverflow.com/q/35616639/7699691。 –

+0

您可以將[Celery](http://www.celeryproject.org/)與Flask – stamaimer

回答

0

Python(CPython)未針對線程框架進行優化。您可以繼續分配更多資源,並且會嘗試產生/排隊新線程並重載核心。您需要進行設計更改的位置:

工藝爲基礎的設計:

  1. 要麼使用multiprocessing模塊
  2. 利用rabbitmq,使這個任務單獨運行
  3. 釀出subprocess

或者如果你仍然想堅持線程:

  1. 切換到​​3210(更快比CPython的)
  2. 切換到PyPy-STM(完全符合GIL摒棄)