2011-09-01 79 views
2

我正在尝试开发一个能够让用户在服务器上运行C程序的Django网络应用程序。我目前以下的步骤:使用Django进行远程代码执行的Web应用程序

  • 代码用户类型和点击了“Submit”按钮
  • 代码进入服务器;服务器把它放在一个临时文件
  • 代码是用汇编了呼叫subprocess.Popen()
  • 输出(错误)返回到浏览器

这是一个简单的模型,做工精细。但是,我不知道这是否是“完美”的模式,我有一些担忧它的可扩展性(和安全性):

  1. 它会更好使用threading
  2. 使用multiprocessing会更好吗?
  3. 我自己提出的相关问题中指出了叉炸弹问题here - 如何处理? apache2.conf中的以下设置是否能够处理这种情况?
 

    # prefork MPM 
    # StartServers: number of server processes to start 
    # MinSpareServers: minimum number of server processes which are kept spare 
    # MaxSpareServers: maximum number of server processes which are kept spare 
    # MaxClients: maximum number of server processes allowed to start 
    # MaxRequestsPerChild: maximum number of requests a server process serves 
 

说,当我考虑的情况下,5,15,50用户会尝试以并行方式运行他们的代码。此外,暂时假定不写入恶意代码。

刚才提到,mod_wsgimpm-prefork与Apache2正在使用。

感谢您的所有建议!

+0

你在做什么,使用mod_wsgi和prefork MPM的嵌入模式是一个不好主意。去阅读http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html –

回答

2

也许Celery项目会帮助你。

Celery是基于分布式消息传递的异步任务队列/作业队列。它专注于实时操作,但也支持调度。

执行单元(称为任务)在使用多处理,Eventlet或gevent的单个或多个工作服务器上同时执行。任务可以异步执行(在后台)或同步执行(等待直到准备就绪)。

+0

谢谢,我使用'芹菜'。但是,不确定与性能有关的事情。 – Barun

相关问题