2011-07-11 6 views
0

現在のDjangoプロジェクトに関連するSupervisorプロセスを再起動するために、TextMateにバンドルを作成しました。 Pythonインタプリタでコードを実行すると、ブロックせずにプロセスが正常に再開されますが、TextMateバンドル(.pyファイルを保存するたびに実行されるように設定)として使用するとGUIが約3秒間ブロックされます。私がこれを避ける方法はありますか?TextMate Pythonバンドルnon-blocking

は、ここでは、コードは次のようになります。

#!/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() 

答えて

0

これは遅すぎる、おそらくですが、初期のpopenの引数でclose_fds = trueを設定して、それをクローズしたいと思います。それを指定すると、応答を待つことはありません。

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

私はもうこのバンドルを使用しません。しかし、あなたの評価は妥当と思われます! – jmagnusson

関連する問題