Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from time import sleep
- i = 0
- while i < 1000:
- print 'myjob:', i
- i=i+1
- sleep(0.1)
- sys.stdout.flush()
- urlpatterns = patterns('',
- (r'^startjob/$', 'mysite.myapp.views.startjob'),
- (r'^showjob/$', 'mysite.myapp.views.showjob'),
- (r'^rmjob/$', 'mysite.myapp.views.rmjob'),
- )
- from tempfile import mkstemp
- from os import fdopen,unlink,kill
- from subprocess import Popen
- import signal
- def startjob(request):
- """Start a new long running process unless already started."""
- if not request.session.has_key('job'):
- # create a temporary file to save the resuls
- outfd,outname=mkstemp()
- request.session['jobfile']=outname
- outfile=fdopen(outfd,'a+')
- proc=Popen("python myjob.py",shell=True,stdout=outfile)
- # remember pid to terminate the job later
- request.session['job']=proc.pid
- return HttpResponse('A <a href="/showjob/">new job</a> has started.')
- def showjob(request):
- """Show the last result of the running job."""
- if not request.session.has_key('job'):
- return HttpResponse('Not running a job.'+
- '<a href="/startjob/">Start a new one?</a>')
- else:
- filename=request.session['jobfile']
- results=open(filename)
- lines=results.readlines()
- try:
- return HttpResponse(lines[-1]+
- '<p><a href="/rmjob/">Terminate?</a>')
- except:
- return HttpResponse('No results yet.'+
- '<p><a href="/rmjob/">Terminate?</a>')
- return response
- def rmjob(request):
- """Terminate the runining job."""
- if request.session.has_key('job'):
- job=request.session['job']
- filename=request.session['jobfile']
- try:
- kill(job,signal.SIGKILL) # unix only
- unlink(filename)
- except OSError, e:
- pass # probably the job has finished already
- del request.session['job']
- del request.session['jobfile']
- return HttpResponseRedirect('/startjob/') # start a new one
Add Comment
Please, Sign In to add comment