[英]How to make Ruby or Python web sites to use multiple cores?
我不完全確定你想要解決哪個問題,但如果你通過apache prefork部署你的python / django應用程序MPM使用mod_python apache將啟動幾個工作進程來處理不同的請求。
如果一個請求需要這么多資源,那么您想要使用多個核心就可以看一下pyprocessing 。 但我不認為這是明智的。
使用rails執行此操作的“標准”方法是運行Mongrel實例的“包”(即:rails應用程序的4個副本),然后使用apache或nginx或其他一些軟件坐在它們前面並執行操作作為負載均衡器。
這可能與其他ruby框架如merb等有關,但我沒有親自使用過。
操作系統將負責在其自己的CPU上運行每個mongrel。
如果您安裝mod_rails aka phusion passenger,它也會啟動和停止rails進程的多個副本,因此最終會以類似的方式將負載分散到多個CPU /核心。
在Python和Ruby中,只能使用多個核心,就是產生新的(重量級)進程。 Java對應物繼承了Java平台的可能性。 你可以暗示使用Java線程。 這就是為什么有時(通常)像Glassfish這樣的Java Application Server被用於Ruby on Rails應用程序的原因。
使用在單獨的解釋器中運行每個響應的接口,例如Python的mod_wsgi
。 這樣可以在不遇到GIL的情況下使用多線程。
編輯:顯然, mod_wsgi
不再支持每個進程多個解釋器,因為白痴無法弄清楚如何正確實現擴展模塊。 它仍然支持在單獨的進程FastCGI樣式中運行請求,因此這顯然是當前接受的解決方案。
對於Python, PyProcessing項目允許您使用與使用線程類似的進程進行編程。 它作為multiprocessing
包含在最近發布的2.6版本的標准庫中。 該模塊具有許多功能,用於建立和控制對共享數據結構(隊列,管道等)的訪問,並支持常見習語(即管理者和工作者池)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.