Henrique Andrade <h...@unscrambl.com> added the comment:

Here is the repro (I am running this on Ubuntu 16 with the stock Python 
 version 2.7.12):

========================================================================================

#!/usr/bin/env python      
                
import os              
import subprocess                               
import sys                                        
                                                
from multiprocessing import Process, Queue      
from multiprocessing.queues import _sentinel                
                                                            
                                                            
def run_external_application(application_name, queue):      
    """Runs an Oxygen application"""                                     
    exit_status = 10            
    queue.put(exit_status)                         
    # none of the following help as far as making the pipe go away       
    queue.put(_sentinel)                                 
    queue.close()                                             
                                                              
                                                            
def run(application_name="external_application"):                               
                        
    print "Starting '%s'" % application_name                                    
                        
                                                                                
                              
    queue = Queue()                                                             
                      
    application_process = Process(target=run_external_application, 
args=(application_name, queue))      
                                                                                
                      
    application_process.start()         
                                             
    try:                                     
        application_process.join()         
    except KeyboardInterrupt:              
        application_process.terminate()      
                                           
    exit_status = queue.get()                                                   
                                 
    print "exit status", exit_status                                            
                                 
                                                                                
                               
    queue.close()                                                               
                          
    # the deletion below has no effect                                          
                            
    del queue                                                                   
                            
    # the only thing that will make the pipe go away is to uncomment the below 
statement                      
    # queue._writer.close()                                                     
                            
                                                                                
                            
    print "\nthe '%s' application finished with exit status '%s'...\n" % 
(application_name, exit_status)      
     
    print "Note the file descriptor #4 below"     
    subprocess.call(["ls", "-la", "/proc/%d/fd" % os.getpid()])      
                                        
    return exit_status                  
                                                                                
                                       
                                                                                
                                       
if __name__ == "__main__":                                                      
                                       
    print "starting ", os.getpid()                                              
                                       
    exit_status = run()                                                         
                                       
    sys.exit(exit_status)

----------

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

Reply via email to