即使Python和Ruby每个解释器线程都有一个内核线程,但它们具有用于保护潜在共享数据结构的全局解释器锁(GIL),因此这会禁止多处理器执行。尽管这些languajes中用C或C++编写的部分可以是自由线程的,但除非使用多个进程,否则纯粹的解释代码是不可能的。达到此目的的最佳方式是什么? Using FastCGI?创建一个cluster or a farm虚拟服务器?使用他们的Java等价物,JRuby和Jython?如何让Ruby或Python网站使用多个核心?
回答
使用在单独的解释器中运行每个响应的接口,例如Python的mod_wsgi
。这可以使用多线程而不会遇到GIL。
编辑:显然,mod_wsgi
不再支持每个进程的多个解释器,因为白痴无法弄清楚如何正确实现扩展模块。尽管如此,它仍然支持FastCGI风格的单独进程中的运行请求,所以这显然是目前接受的解决方案。
我不完全确定你想要解决哪个问题,但是如果你使用mod_python通过apache prefork MPM部署你的python/django应用程序,apache将启动几个工作进程来处理不同的请求。
如果一个请求需要这么多的资源,那么你想使用多个内核看看pyprocessing。但我不认为这是明智的。
使用rails的'标准'方法是运行一个Mongrel实例的“包”(即:4个rails应用程序副本),然后使用apache或nginx或其他软件来坐在前面并充当负载平衡器。
这可能是如何与其他ruby框架,如merb等,但我没有亲自使用过。
操作系统将负责在自己的CPU上运行每个杂种。
如果您安装了mod_rails aka phusion passenger它也会为您启动和停止多个rails进程副本,因此最终会以类似的方式将负载分散到多个CPU /内核中。
在Python和Ruby中,只能使用多个核心,以产生新的(重量级)进程。 Java对应方继承了Java平台的可能性。你可能暗示使用Java线程。这就是为什么有时(通常)像Glassfish这样的Java Application Server用于Ruby on Rails应用程序的原因。
对于Python,PyProcessing项目允许您使用与使用线程相似的进程进行编程。它包含在最近发布的2.6版本的标准库中,编号为multiprocessing
。该模块具有许多功能,用于建立和控制对共享数据结构(队列,管道等)的访问并支持常见习惯用语(即管理人员和工作人员池)。
- 1. 无法让java使用多个核心
- 2. 如何让clisp或sbcl使用所有cpu核心可用?
- 3. cakephp3如何共享一个核心到多个站点
- 4. 使用Asp.Net核心托管一个纯粹的角度网站?
- 5. Python多处理似乎不使用多个核心
- 6. 如何让单个网址承载多个网站?
- 7. python网站爬虫(多个网站)
- 8. Asp.net(核心) - 导航到多个网址
- 9. 在多个核心上运行Python
- 10. 如何让网站使用https默认?
- 11. R包自动使用多个核心?
- 12. 使用核心数据(多个ViewControllers)
- 13. 如何让一个核心类调用一个客户类?
- 14. 如何让我的网站多租户
- 15. simultanously在物联网核心使用多个蓝牙HCI UWP
- 16. .NET核心网站bindingRedirect构建错误
- 17. 网站中加密的核心文件
- 18. 无法读取asp.net网站核心
- 19. 如何让我的网站使用多种语言?
- 20. 如何使用R或Python刮取多个页面的网页
- 21. 如何让sbcl自动加载核心?
- 22. 如何在多个核心上使用R str_detect
- 23. 如何在ASP.NET核心项目中使用多个gulpfile.js?
- 24. 网站显示网站核心登录页面
- 25. 如何跨多个网站
- 26. python多处理没有使用多核心
- 27. 如何让Windows Apache使用所有的cpu核心?
- 28. 如何将Drupal登录集成到核心PHP网站
- 29. 如何让SQL Server Express使用多个内核?
- 30. 我们如何让OpenMP使用多个内核 - glintenet
没有必要产生新的进程,只需在请求之间重新使用它们。 – 2008-10-10 07:27:42