2016-12-09 38 views
0

當我在燒瓶中設置選項app.run(threaded=True))時,我的服務可以處理多個併發請求。但似乎我的服務將盡可能消耗CPU資源來處理多個併發請求。 是否有限制或控制我的應用程序使用的資源?燒瓶中多個併發請求的控制資源

+0

我的建議是使用一個更好的WSGI服務器像uwsgi或gunicorn不瓶的開發服務器,它們都具有用於控制系統資源 – danidee

+0

選項我試着用gunicorn選項: gunicorn --workers = 4 -t 3000 myapp -b端口。 我不知道它是否在我的情況下工作(我只是希望有一半的CPU資源用於我的服務),因爲當有4個請求時,我的服務創建了大約8-10個進程。 –

+0

我的想法是,併發進程的數量應該等於處理器的核心數量的一半。例如4核CPU上的2個進程只能佔用50%的資源。 – sytech

回答

0

您可以嘗試使用資源模塊。取自this post。你會爲CPU做這樣的事情。 Here is資源模塊上的頁面。

import resource 
sec = 60 * 60 # this is one hour of time. 
resource.setrlimit(resource.RLIMIT_CPU, sec) 

注意,這會更改CPU允許進程的時間(以秒爲單位)。如果要限制進程的堆棧/堆大小數量,則必須使用resource.RLIMIT_STACKresource.RLIMIT_HEAP。這些都是以字節爲單位的,所以代碼看起來像這樣。

import resource 
mem = 1024 * 1024 # this is one megabyte, you want much more than this normally 
resource.setrlimit(resource.RLIMIT_STACK, mem) 
resource.setrlimit(resource.RLIMIT_HEAP, mem) 
+0

這會引起衝突嗎?由於我的服務是多處理,所以創建了4個進程來處理每個請求。 –

+0

不,多處理使用線程,即使它看起來不像它。一個進程是一個單一的程序,當程序啓動另一個程序時,它應該將它作爲一個線程啓動。我可能在這方面是錯誤的,你可能不得不作爲一個線程開始它,我不知道Python多處理如何工作。如果它不起作用,那麼你可以爲每個進程做同樣的事情,限制每個進程的資源數量。 –

+0

其實一個wsgi服務器(gunicorn)解決了我的問題。 –