[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

AltStyle によって変換されたページ (->オリジナル) /