2011-08-09 2 views
0

Le module de multitraitement dans Python 3.2.1 sur Windows 7 x86 semble me vaincre.multiprocessing ne pas engendrer de nouveaux processus

J'ai deux modules: servmain.py et sslserver.py. L'idée est de (éventuellement) coder une application qui communiquera avec les clients utilisant SSL. C'est la partie que j'ai déjà en bas. Cependant, j'ai besoin que l'écouteur du serveur soit séparé dans son propre processus afin que le processus principal puisse faire d'autres choses. En tant que test fictif, j'ai demandé au processus fils d'imprimer "Hello World" sur stdout et d'écrire du texte dans un fichier texte inexistant.

Voici le code de mon processus parent (servmain.py):

from multiprocessing import Process 
import logging 

if __name__ == "__main__": 
    logger = multiprocessing.log_to_stderr() 
    logger.setLevel(logging.DEBUG) 

    #Fire up the server 


    listenerProcess = Process(target = sslserver.startServer) 
    listenerProcess.start() 
    logger.debug("Starting listener.") 
    listenerProcess.join() 
    logger.debug("Done.") 

Et voici le code sslserver.py:

def startServer(): 
    print("Hello World") 
    f= open("testfile.txt", "w") 
    f.write("Hello world\n") 
    f.close() 

Quand je lance servmain.py, je reçois la sortie suivante:

[DEBUG/MainProcess] Démarrage du programme d'écoute. [DEBUG/MainProcess] Terminé.

Ce qui est ce que je m'attendrais. Cependant, testfile.txt n'a pas été créé et il n'y a pas de sortie sur stdout. Est-ce que quelqu'un a une idée de pourquoi cela pourrait se produire?

+0

Juste pour vous assurer, vous avez réellement fait 'multiprocessing' importation et' importation sslserver' , pour que votre code fonctionne réellement comme vous le dites? ('logger = multiprocessing.log_to_stderr()' et 'listenerProcess = Processus (target = sslserver.startServer)' ) – agf

+0

Oui, les importations sont en place; le code s'exécute sans erreurs d'importation. – wibarr

+0

Êtes-vous sûr d'écrire dans un répertoire pour lequel vous avez l'autorisation d'écrire? Pouvez-vous essayer de définir explicitement le chemin de 'testfile.txt' dans un répertoire dont vous êtes sûr à 100% qu'il est accessible en écriture? –

Répondre

1

Je pense qu'il me manque quelques bibliothèques ici, donc j'ai dû supprimer votre code de l'enregistreur parce que c'était un problème pour moi. Pour moi, il semblerait que vous ayez un conflit de nom/chemin. Assurez-vous que le nom "sslserver" ne se connecte à aucun module dans le chemin python.

Définissez également le chemin python! Dans mon exemple, ces deux fichiers se trouvent dans le même répertoire.

pytest.py

#!/usr/bin/env python 
from multiprocessing import Process 
import sslserver 
import logging 
if __name__ == "__main__": 
    #logger = multiprocessing.log_to_stderr() 
    #logger.setLevel(logging.DEBUG) 

    #Fire up the server 


    listenerProcess = Process(target = sslserver.startServer) 
    listenerProcess.start() 
    #logger.debug("Starting listener.") 
    print "Starting Listener\n" 
    listenerProcess.join() 
    #logger.debug("Done.") 
    print "Done\n"; 

sslserver.py

#!/usr/bin/env python 

def startServer(): 
    print("Hello World") 
    f= open("testfile.txt", "w") 
    f.write("Hello world\n") 
    f.close() 

Sortie

[email protected]:~/temp$ ./pytest.py 
Starting Listener 

Hello World 
Done 

[email protected]:~/temp$ cat testfile.txt 
Hello world 
Questions connexes