开发者

Django - Python: Spawn a process and return

I've been searching for an answer to this for awhile, it's possible that I haven't been searching for the right information though.

I'm trying to sen开发者_Python百科d data to a server, and once received the server executes a python script based on that data. I have been trying to spawn a thread and return, but I can't figure out how to "detach" the thread. I simply have to wait until the thread returns to be able to return an HttpResponse(). This is unacceptable, as the website interface has many other things that need to be able to be used while the thread runs on the server.

I'm not certain that was a clear explanation but I'll be more than happy to clarify if any part is confusing.


Have a look at Celery. It's quite nice in that you can accept the request, and it offload it quickly to workers, and return. It's simple to use.

http://celeryproject.org/


Most simply, you can do this with subprocess.Popen. See here for some information regarding the subprocess module:

http://docs.python.org/library/subprocess.html

There are other (possibly better) methods to doing this, but this one seems to fit your requirements.


  1. Use message queue system, like celery (django-celery may help you.)

  2. Use RDBMS and background process(es) which is periodically invoked by cron or always running. First, the web server inserts data required by the background job into a database table. And then, background process (always running or run periodically by cron) gets the latest inserted row(s) and process it.

  3. Spawn a thread.

worker_thread = threading.Thread(target=do_background_job, args=args)
worker_thread.setDaemon(False)
worker_thread.start()
return HttpResponse()

Even after HttpResponse is sent, do_background_job is processed. However, because Web server (apache) may kill any threads, execution of background_job is not guaranteed.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜