Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #30558

Re: Can somebody give me an advice about what to learn?

From Roy Smith <roy@panix.com>
Newsgroups comp.lang.python
Subject Re: Can somebody give me an advice about what to learn?
Date 2012-09-30 11:01 -0400
Organization PANIX Public Access Internet and UNIX, NYC
Message-ID <roy-0C9D23.11011030092012@news.panix.com> (permalink)
References <15f76508-437a-4d18-ac9b-16174ef172e8@googlegroups.com> <mailman.1672.1349011558.27098.python-list@python.org> <roy-A05EF0.10233530092012@news.panix.com> <mailman.1675.1349015755.27098.python-list@python.org>

Show all headers | View raw


In article <mailman.1675.1349015755.27098.python-list@python.org>,
 Chris Angelico <rosuav@gmail.com> wrote:

> On Mon, Oct 1, 2012 at 12:23 AM, Roy Smith <roy@panix.com> wrote:
> > In article <mailman.1672.1349011558.27098.python-list@python.org>,
> >  Chris Angelico <rosuav@gmail.com> wrote:
> >
> >> there's no efficient and reliable way to change/reload code in a
> >> running application (not often an issue).
> >
> > What we do (largely cribbed from django's runserver) is start up a
> > thread which once a second, looks at all the modules in sys.modules,
> > checks to see if the modification time for their source files has
> > changed, and if so, restarts the application.  This is hugely convenient
> > when developing any kind of long-running application.  You don't need to
> > keep restarting the application; just edit the source and changes take
> > effect (almost) immediately.
> >
> > Not sure if this is what you had in mind.
> 
> It's not an _explicit_ restart, but you have to write your application
> to keep all its state on disk in some way.

Well, more strictly, what you need is to keep your state somewhere else.  
Doesn't have to be on disk.  Could be in memory, if that memory belongs 
to another process (memcache, redis, or any of a number of in-memory 
databases).

> What I'm talking about is
> having a single process that never terminates, never stops accepting
> connections, but at some point new connections begin to be served with
> new code - with old ones, if they're still going, continuing to be
> handled by the old code. I have one such process that's been going for
> (let me check) 115 wk 0d 21:05:21.

Why does it have to be a single process?  I could imagine some front-end 
process which accepts connections and hands them off to worker 
processes.  When you install new code, you could do it in a different 
directory tree, and then signal the front end that new code exists.  The 
front end could then {chdir, munge sys.path, whatever} to the root of 
the new tree and keep going.  Existing connections stay up with the old 
code, new connections get the new code.

If you didn't want to fork a new process every time, you could have a 
worker process pool.  When a worker signaled it was done with a task, 
the front end could either assign it a new connection (if the code it 
was running was still current), or kill it off if it was running stale 
code.

If you truly needed this to be a single process, I could imagine a 
customized module importer which altered the module name to include a 
version prefix before registering it in sys.modules.  I think that could 
be made to work, but would be really ugly and complicated.  Or elegant 
and nifty, depending on your attitude :-)

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Can somebody give me an advice about what to learn? tcgo <tomeuari@gmail.com> - 2012-09-30 05:58 -0700
  Re: Can somebody give me an advice about what to learn? Chris Angelico <rosuav@gmail.com> - 2012-09-30 23:25 +1000
    Re: Can somebody give me an advice about what to learn? Roy Smith <roy@panix.com> - 2012-09-30 10:23 -0400
      Re: Can somebody give me an advice about what to learn? Chris Angelico <rosuav@gmail.com> - 2012-10-01 00:35 +1000
        Re: Can somebody give me an advice about what to learn? Roy Smith <roy@panix.com> - 2012-09-30 11:01 -0400
          Re: Can somebody give me an advice about what to learn? Chris Angelico <rosuav@gmail.com> - 2012-10-01 01:37 +1000
            Re: Can somebody give me an advice about what to learn? Roy Smith <roy@panix.com> - 2012-09-30 18:14 -0400
              Re: Can somebody give me an advice about what to learn? Chris Angelico <rosuav@gmail.com> - 2012-10-01 09:11 +1000
              Re: Can somebody give me an advice about what to learn? Hans Mulder <hansmu@xs4all.nl> - 2012-10-03 19:55 +0200
      Re: Can somebody give me an advice about what to learn? Chris Angelico <rosuav@gmail.com> - 2012-10-01 00:37 +1000
  Re: Can somebody give me an advice about what to learn? Tim Chase <python.list@tim.thechases.com> - 2012-09-30 08:45 -0500
  Re: Can somebody give me an advice about what to learn? rusi <rustompmody@gmail.com> - 2012-09-30 08:18 -0700
    Re: Can somebody give me an advice about what to learn? Roy Smith <roy@panix.com> - 2012-09-30 18:17 -0400
      Re: Can somebody give me an advice about what to learn? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-09-30 23:59 +0000
  Re: Can somebody give me an advice about what to learn? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2012-09-30 16:47 +0100
  Re: Can somebody give me an advice about what to learn? Wolfgang Keller <feliphil@gmx.net> - 2012-10-03 20:31 +0200
    Re: Can somebody give me an advice about what to learn? Chris Rebert <clp2@rebertia.com> - 2012-10-03 21:47 -0700
      Re: Can somebody give me an advice about what to learn? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-10-04 06:34 +0000
        Re: Can somebody give me an advice about what to learn? Wolfgang Keller <feliphil@gmx.net> - 2012-10-04 19:45 +0200

csiph-web