[Python-Dev] Solving the import-deadlock case
Pascal Chambon
chambon.pascal at wanadoo.fr
Wed Jul 3 21:55:57 CEST 2013
Thanks for the comments,
in my particular case we're actually on a provisioning /framework/, so
we chose the easy (lazy?) way, i.e initializing miscellaneous modules at
loading times (like Django or others do, I think), rather than building
an proper initialization dispatcher to be called from eg. a wsgi launcher.
It works pretty well actually, except that nasty (but fortunately very
rare) import deadlock. ^^
Since module loading errors *might* occur for tons of reasons (i.e
searching the disk for py files already IS a side effect...), and since
the current behaviour (letting children module survive disconnected from
their parent) is more harmful than useful, I guess that the cleanup that
Nick evocated iwould be the path to follow, wouldn't it ?
thanks,
Regards,
Pascal
Le 02/07/2013 23:32, Nick Coghlan a écrit :
>
>
> On 3 Jul 2013 04:34, "Pascal Chambon" <pythoniks at gmail.com
> <mailto:pythoniks at gmail.com>> wrote:
> >
> > Hello everyone,
> >
> > I'd like to bring your attention to this issue, since it touches the
> fundamentals of python's import workflow:
> > http://bugs.python.org/issue17716
> >
> > I've tried to post it on the python-import ML for weeks, but it must
> still be blocked somewhere in a moderation queue, so here I come ^^
> >
> > TLDR version: because of the way import current works, if importing
> a package "temporarily" fails whereas importing one of its children
> succeeded, we reach an unusable state, all subsequent attempts at
> importing that package will fail if a "from...import" is used
> somewhere. Typically, it makes a web worker broken, even though the
> typical behaviour of such process woudl be to retry loading, again and
> again, the failing view.
> >
> > I agree that a module loading should be, as much as possible, "side
> effects free", and thus shouldn't have temporary errors. But well, in
> practice, module loading is typically the time where process-wide
> initialization are done (modifying sys.path, os.environ, instantiating
> connection or thread pools, registering atexit handler, starting
> maintenance threads...), so that case has chances to happen at a
> moment or another, especially if accesses to filesystem or network
> (SQL...) are done at module loading, due to the lack of initialization
> system at upper levels.
> >
> > That's why I propose modifying the behaviour of module import, so
> that submodules are deleted as well when a parent module import fails.
> True, it means they will be reloaded as well when importing the parent
> will start again, but anyway we already have a "double execution"
> problem with the reloading of the parent module, so it shouldn't make
> a big difference.
> > The only other solution I'd see would be to SYSTEMATICALLY perform
> name (re)binding when processing a from...import statement, to recover
> from the previously failed initialization. Dunno if it's a good idea.
> >
> > On a (separate but related) topic, to be safer on module reimports
> or reloadings, it could be interesting to add some "idempotency" to
> common initialization tasks ; for example the "atexit" registration
> system, wouldn't it be worth adding a boolean flag to explicitely skip
> registration if a callable with same fully qualified name is already
> registered.
> >
> > Do you have opinions on these subjects ?
>
> Back on topic...
>
> As I stated on the issue, I think purging the whole subtree when a
> package implicitly imports child modules is the least bad of the
> available options, and better than leaving the child modules in place
> in violation of the "all parent packages can be assumed to be in
> sys.modules" invariant (which is what we do now).
>
> Cheers,
> Nick.
> >
> > thanks,
> > regards,
> > Pascal
> >
> > _______________________________________________
> > Python-Dev mailing list
> > Python-Dev at python.org <mailto:Python-Dev at python.org>
> > http://mail.python.org/mailman/listinfo/python-dev
> > Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/ncoghlan%40gmail.com
> >
>
>
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/chambon.pascal%40wanadoo.fr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130703/e6e108e5/attachment.html>
More information about the Python-Dev
mailing list