Serhiy Storchaka added the comment:

sys.stdin is set to open(os.devnull) in multiprocessing.forkserer and 
multiprocessing.process (see issue5313). At shutdown stage sys.std* streams are 
restored to sys.__std*__. Here the resource warning is emitted.

An example that demonstrates similar issue:

$ ./python -We -c 'import sys; sys.stdin = open("/dev/null")'
Exception ignored in: <_io.FileIO name='/dev/null' mode='rb' closefd=True>
ResourceWarning: unclosed file <_io.TextIOWrapper name='/dev/null' mode='r' 
encoding='UTF-8'>

A workaround is to set sys.__stdin__ as well as sys.stdin. Now a resource 
warning is no longer emitted at the stage of restoring standard streams, but it 
can be randomly emitted at the stage of clearing sys dict (depending on the 
order of deallocating stdin and stderr). The question is why a resource warning 
is not emitted in normal case, with standard stdin.

Proposed patch closes sys.__stdin__ and set it to sys.stdin in multiprocessing, 
makes standard streams cleanup at shutdown more reliable, and fixes two tests 
that set sys.stderr.

----------
components: +Interpreter Core, Library (Lib)
keywords: +patch
nosy: +jnoller, pitrou, serhiy.storchaka
stage:  -> patch review
versions: +Python 2.7, Python 3.4, Python 3.5
Added file: http://bugs.python.org/file41068/cleanup_std_streams.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25654>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to