Re: Spawning long processes

2007-07-05 Thread Oliver Charles

Ahhh, I got it now - Thanks so much Simon! The problem was I had left
out close_fds, so it was still spawning as a child process I think.
With close_fds it works a treat - thank you once again :D

- Ollie

On Jul 5, 3:18 pm, Simon Drabble <[EMAIL PROTECTED]> wrote:
> On Thu, 5 Jul 2007, Oliver Charles wrote:
>
> > That doesn't work, I've tried that, it still hangs the view.
>
> > Give it a shot with a long python script (while True: time.sleep(1)
> > would do) and you'll find that the view never returns. If you can get
> > it to return, I'd love to see your code, but it's no go for me...
>
> Well, modulo the script name & arguments, that's the code I'm using
> successfully to run background processes. How have you verified that
> the view does not return? Does the sub-process actually start (i.e.
> can you see it with ps)? What OS are you using, and have you verified
> that the code you are uring works outside of django (write a small
> shell script that does nothing but call the external torrent process -
> does that work as expected?).
>
> -Simon.
>
>
>
> > On Jul 5, 2:57 pm, Simon Drabble <[EMAIL PROTECTED]> wrote:
> >> On Thu, 5 Jul 2007, Oliver Charles wrote:
>
> >>> Just to give an update, I've tried forking the view, and then turning
> >>> the child process into a daemon with a double fork, and then exiting
> >>> before it gets to the return, and letting the parent do the return,
> >>> but this is not working either...
>
> >>> I'm stumped, and don't really want to have to create a specific
> >>> controller daemon (but guess I'm going to have to)
>
> >>> - Olllie
>
> >> Use the subprocess module:
>
> >> import subprocess
> >> ...
> >> script = 'python'
> >> args = (script, '/path/to/executable', ...)
> >> env = { ... }
> >> pid = subprocess.Popen(args, close_fds=True, env=env).pid
>
> >> t = Torrent.objects.create(pid=pid)
> >> ...
>
> >> Remember to store the pid for later wait()ing or you'll end up with 
> >> zombies.
>
> >> -Simon.
>
> >>> On Jul 5, 2:58 am, Oliver Charles <[EMAIL PROTECTED]> wrote:
>  Hi
>
>  I'm currently playing around trying to make something akin to
>  TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
>  calls shell scripts to download torrents in the background, with a web
>  interface to control them. For every torrent download, a new process
>  is started, which runs with the torrent - downloading and seeding it.
>
>  My system is similar, and i'm at a very proof of concept stage at the
>  moment. However, I've hit a problem. I can't find a nice way to spawn
>  the processes, without Django hanging as long as the process needs
>  (and for 600mb torrents, that's gonna be hours, and endless if seeding
>  is expected).
>
>  At the moment I am doing:
>
>  def start(request):
>
>  p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
>  dTorrent/btdownloadheadless',
>  '/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
>  +.torrent')
>
>  t = Torrent.objects.create(pid=p)
>
>  return HttpResponse(str(p))
>
>  But this is hanging, despite the P_NOWAIT (the Torrent model does get
>  created).
>
>  Any ideas?
>
> >> --
>
> --


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Spawning long processes

2007-07-05 Thread Simon Drabble

On Thu, 5 Jul 2007, Oliver Charles wrote:

>
> That doesn't work, I've tried that, it still hangs the view.
>
> Give it a shot with a long python script (while True: time.sleep(1)
> would do) and you'll find that the view never returns. If you can get
> it to return, I'd love to see your code, but it's no go for me...
>


Well, modulo the script name & arguments, that's the code I'm using
successfully to run background processes. How have you verified that
the view does not return? Does the sub-process actually start (i.e.
can you see it with ps)? What OS are you using, and have you verified
that the code you are uring works outside of django (write a small
shell script that does nothing but call the external torrent process -
does that work as expected?).

-Simon.

> On Jul 5, 2:57 pm, Simon Drabble <[EMAIL PROTECTED]> wrote:
>> On Thu, 5 Jul 2007, Oliver Charles wrote:
>>
>>> Just to give an update, I've tried forking the view, and then turning
>>> the child process into a daemon with a double fork, and then exiting
>>> before it gets to the return, and letting the parent do the return,
>>> but this is not working either...
>>
>>> I'm stumped, and don't really want to have to create a specific
>>> controller daemon (but guess I'm going to have to)
>>
>>> - Olllie
>>
>> Use the subprocess module:
>>
>> import subprocess
>> ...
>> script = 'python'
>> args = (script, '/path/to/executable', ...)
>> env = { ... }
>> pid = subprocess.Popen(args, close_fds=True, env=env).pid
>>
>> t = Torrent.objects.create(pid=pid)
>> ...
>>
>> Remember to store the pid for later wait()ing or you'll end up with zombies.
>>
>> -Simon.
>>
>>
>>
>>
>>
>>> On Jul 5, 2:58 am, Oliver Charles <[EMAIL PROTECTED]> wrote:
 Hi
>>
 I'm currently playing around trying to make something akin to
 TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
 calls shell scripts to download torrents in the background, with a web
 interface to control them. For every torrent download, a new process
 is started, which runs with the torrent - downloading and seeding it.
>>
 My system is similar, and i'm at a very proof of concept stage at the
 moment. However, I've hit a problem. I can't find a nice way to spawn
 the processes, without Django hanging as long as the process needs
 (and for 600mb torrents, that's gonna be hours, and endless if seeding
 is expected).
>>
 At the moment I am doing:
>>
 def start(request):
>>
 p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
 dTorrent/btdownloadheadless',
 '/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
 +.torrent')
>>
 t = Torrent.objects.create(pid=p)
>>
 return HttpResponse(str(p))
>>
 But this is hanging, despite the P_NOWAIT (the Torrent model does get
 created).
>>
 Any ideas?
>>
>> --
>
>
> >

-- 

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Spawning long processes

2007-07-05 Thread Oliver Charles

That doesn't work, I've tried that, it still hangs the view.

Give it a shot with a long python script (while True: time.sleep(1)
would do) and you'll find that the view never returns. If you can get
it to return, I'd love to see your code, but it's no go for me...

On Jul 5, 2:57 pm, Simon Drabble <[EMAIL PROTECTED]> wrote:
> On Thu, 5 Jul 2007, Oliver Charles wrote:
>
> > Just to give an update, I've tried forking the view, and then turning
> > the child process into a daemon with a double fork, and then exiting
> > before it gets to the return, and letting the parent do the return,
> > but this is not working either...
>
> > I'm stumped, and don't really want to have to create a specific
> > controller daemon (but guess I'm going to have to)
>
> > - Olllie
>
> Use the subprocess module:
>
> import subprocess
> ...
> script = 'python'
> args = (script, '/path/to/executable', ...)
> env = { ... }
> pid = subprocess.Popen(args, close_fds=True, env=env).pid
>
> t = Torrent.objects.create(pid=pid)
> ...
>
> Remember to store the pid for later wait()ing or you'll end up with zombies.
>
> -Simon.
>
>
>
>
>
> > On Jul 5, 2:58 am, Oliver Charles <[EMAIL PROTECTED]> wrote:
> >> Hi
>
> >> I'm currently playing around trying to make something akin to
> >> TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
> >> calls shell scripts to download torrents in the background, with a web
> >> interface to control them. For every torrent download, a new process
> >> is started, which runs with the torrent - downloading and seeding it.
>
> >> My system is similar, and i'm at a very proof of concept stage at the
> >> moment. However, I've hit a problem. I can't find a nice way to spawn
> >> the processes, without Django hanging as long as the process needs
> >> (and for 600mb torrents, that's gonna be hours, and endless if seeding
> >> is expected).
>
> >> At the moment I am doing:
>
> >> def start(request):
>
> >> p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
> >> dTorrent/btdownloadheadless',
> >> '/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
> >> +.torrent')
>
> >> t = Torrent.objects.create(pid=p)
>
> >> return HttpResponse(str(p))
>
> >> But this is hanging, despite the P_NOWAIT (the Torrent model does get
> >> created).
>
> >> Any ideas?
>
> --


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: [django-users] Re: Spawning long processes

2007-07-05 Thread Simon Drabble

On Thu, 5 Jul 2007, Oliver Charles wrote:

>
> Just to give an update, I've tried forking the view, and then turning
> the child process into a daemon with a double fork, and then exiting
> before it gets to the return, and letting the parent do the return,
> but this is not working either...
>
> I'm stumped, and don't really want to have to create a specific
> controller daemon (but guess I'm going to have to)
>
> - Olllie


Use the subprocess module:

import subprocess
...
script = 'python'
args = (script, '/path/to/executable', ...)
env = { ... }
pid = subprocess.Popen(args, close_fds=True, env=env).pid

t = Torrent.objects.create(pid=pid)
...

Remember to store the pid for later wait()ing or you'll end up with zombies.


-Simon.

>
> On Jul 5, 2:58 am, Oliver Charles <[EMAIL PROTECTED]> wrote:
>> Hi
>>
>> I'm currently playing around trying to make something akin to
>> TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
>> calls shell scripts to download torrents in the background, with a web
>> interface to control them. For every torrent download, a new process
>> is started, which runs with the torrent - downloading and seeding it.
>>
>> My system is similar, and i'm at a very proof of concept stage at the
>> moment. However, I've hit a problem. I can't find a nice way to spawn
>> the processes, without Django hanging as long as the process needs
>> (and for 600mb torrents, that's gonna be hours, and endless if seeding
>> is expected).
>>
>> At the moment I am doing:
>>
>> def start(request):
>>
>> p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
>> dTorrent/btdownloadheadless',
>> '/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
>> +.torrent')
>>
>> t = Torrent.objects.create(pid=p)
>>
>> return HttpResponse(str(p))
>>
>> But this is hanging, despite the P_NOWAIT (the Torrent model does get
>> created).
>>
>> Any ideas?
>
>
> >

-- 

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Spawning long processes

2007-07-05 Thread Oliver Charles

Just to give an update, I've tried forking the view, and then turning
the child process into a daemon with a double fork, and then exiting
before it gets to the return, and letting the parent do the return,
but this is not working either...

I'm stumped, and don't really want to have to create a specific
controller daemon (but guess I'm going to have to)

- Olllie

On Jul 5, 2:58 am, Oliver Charles <[EMAIL PROTECTED]> wrote:
> Hi
>
> I'm currently playing around trying to make something akin to
> TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
> calls shell scripts to download torrents in the background, with a web
> interface to control them. For every torrent download, a new process
> is started, which runs with the torrent - downloading and seeding it.
>
> My system is similar, and i'm at a very proof of concept stage at the
> moment. However, I've hit a problem. I can't find a nice way to spawn
> the processes, without Django hanging as long as the process needs
> (and for 600mb torrents, that's gonna be hours, and endless if seeding
> is expected).
>
> At the moment I am doing:
>
> def start(request):
>
> p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
> dTorrent/btdownloadheadless',
> '/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
> +.torrent')
>
> t = Torrent.objects.create(pid=p)
>
> return HttpResponse(str(p))
>
> But this is hanging, despite the P_NOWAIT (the Torrent model does get
> created).
>
> Any ideas?


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Spawning long processes

2007-07-04 Thread Oliver Charles

Hi

I'm currently playing around trying to make something akin to
TorrentFlux, using Django. TorrentFlux is a system that's PHP and it
calls shell scripts to download torrents in the background, with a web
interface to control them. For every torrent download, a new process
is started, which runs with the torrent - downloading and seeding it.

My system is similar, and i'm at a very proof of concept stage at the
moment. However, I've hit a problem. I can't find a nice way to spawn
the processes, without Django hanging as long as the process needs
(and for 600mb torrents, that's gonna be hours, and endless if seeding
is expected).

At the moment I am doing:

def start(request):

p = os.spawnlp(os.P_NOWAIT, 'python', 'python', '/Users/acid/Work/
dTorrent/btdownloadheadless',
'/Users/acid/Desktop/Inbox/-{mininova.org}- Professional C+
+.torrent')

t = Torrent.objects.create(pid=p)

return HttpResponse(str(p))

But this is hanging, despite the P_NOWAIT (the Torrent model does get
created).


Any ideas?


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---