[Python-Dev] pthreads, fork, import, and execvp
Guido van Rossum
guido at python.org
Fri May 12 06:48:35 CEST 2006
Yeah, I think imports inside functions are overused.
On 5/9/06, Rotem Yaari <vmalloc at gmail.com> wrote:
> Hello everyone!
>
> We have been encountering several deadlocks in a threaded Python
> application which calls subprocess.Popen (i.e. fork()) in some of its
> threads.
>
> This has occurred on Python 2.4.1 on a 2.4.27 Linux kernel.
>
> Preliminary analysis of the hang shows that the child process blocks
> upon entering the execvp function, in which the import_lock is acquired
> due to the following line:
>
> def _ execvpe(file, args, env=None):
> from errno import ENOENT, ENOTDIR
> ...
>
> It is known that when forking from a pthreaded application, acquisition
> attempts on locks which were already locked by other threads while
> fork() was called will deadlock.
>
> Due to these oddities we were wondering if it would be better to extract
> the above import line from the execvpe call, to prevent lock
> acquisition attempts in such cases.
>
> Another workaround could be re-assigning a new lock to import_lock
> (such a thing is done with the global interpreter lock) at PyOS_AfterFork or
> pthread_atfork.
>
> We'd appreciate any opinions you might have on the subject.
>
> Thanks in advance,
>
> Yair and Rotem
> _______________________________________________
> 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/guido%40python.org
>
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list