2011-07-11 4 views
0

J'ai créé un ensemble dans TextMate pour redémarrer le processus Superviseur associé au projet Django actuel. L'exécution du code dans l'interpréteur Python redémarre avec succès le processus sans blocage, mais lorsque je l'utilise comme un ensemble TextMate (configuré pour s'exécuter à chaque fois que j'enregistre un fichier .py), il bloque l'interface graphique pendant ~ 3 secondes. Est-ce que je peux éviter cela?Groupe TextMate Python non bloquant

Voici ce que le code ressemble à:

#!/usr/bin/env python 
import os 
import subprocess 
import threading 

projname = os.environ.get('TM_PROJECT_DIRECTORY', '').rpartition('/')[2] 


def restart_proj(projname=None): 
    """ Restart a supervisor instance. 
    Assumes that the name of the supervisor instance is the basename for 
    TM_PROJECT_DIRECTORY. 
    """ 
    if projname: 
     subprocess.Popen('$HOME/.virtualenvs/supervisor/bin/' \ 
         'supervisorctl restart {0}'.format(projname), 
         shell=True, stdout=open('/dev/null', 'w')) 

t = threading.Thread(target=restart_proj, args=(projname,)) 
t.start() 

Répondre

0

Ceci est probablement trop tard, mais vous voulez fermer tôt avec close_fds = ensemble vrai dans l'argument Popen. Avec cela spécifié, il n'attend pas de réponse.

subprocess.Popen('$HOME/.virtualenvs/supervisor/bin/' \ 
        'supervisorctl restart {0}'.format(projname), 
        shell=True, close_fds=True, stdout=open('/dev/null', 'w')) 
+1

Je n'utilise plus ce paquet. Mais votre évaluation semble raisonnable! – jmagnusson