I'm trying to develop a web app with Django
that would let users to run C programs on a server. The steps that I'm currently following are:
- User types in the code and clicks on the '
Submit
' button - Code goes to server; server puts it in a temporary file
- Code is compiled using a call to
subprocess.Popen()
- Output (error) is returned back to the browser
This is a simple model, and working fine. However, I'm not sure if this is the "perfect" model, and I've some concerns about it's scalability (and security):
- Would it be better to use
threading
? - Would it be better to use
multiprocessing
? - Fork bomb issue was pointed out in a related question raised by myself here -- how to deal with that? Would the following settings in
apache2.conf
be able to handle such situations?
# 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
I'm considering the case when say, 5, 15, 50 users would try to run their code in parallel. Also, for the time being am assuming that no malicious code would be written.
Just to mention, mod_wsgi
and mpm-prefork
with Apache2 are being used.
Thanks for all your suggestions!
Maybe Celery project will help you.
Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.
The execution units, called tasks, are executed concurrently on a single or more worker servers using multiprocessing, Eventlet, or gevent. Tasks can execute asynchronously (in the background) or synchronously (wait until ready).
精彩评论