使用Django进行远程代码执行的Web应用程序

时间:2011-09-01 07:24:29

标签: django apache mod-wsgi

我正在尝试使用Django开发一个允许用户在服务器上运行C程序的Web应用程序。我目前正在遵循的步骤是:

  • 用户在代码中输入并点击“Submit”按钮
  • 代码进入服务器;服务器将其放在临时文件中
  • 使用对subprocess.Popen()
  • 的调用编译代码
  • 输出(错误)返回浏览器

这是一个简单的模型,并且工作正常。但是,我不确定这是否是“完美”模型,我对它的可扩展性(和安全性)有一些担忧:

  1. 使用threading会更好吗?
  2. 使用multiprocessing会更好吗?
  3. 我自己提出的一个相关问题here指出了叉炸弹问题 - 如何处理? apache2.conf中的以下设置是否能够处理此类情况?
  4. 
        # 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个用户会尝试并行运行他们的代码。此外,暂时假设不会写入恶意代码。

    简而言之,正在使用Apache mod_wsgimpm-prefork

    感谢你的所有建议!

1 个答案:

答案 0 :(得分:3)

也许Celery项目会帮助你。

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

执行单元(称为任务)使用多处理,Eventlet或gevent在一个或多个工作服务器上并发执行。任务可以异步(在后台)或同步执行(等到准备好)。