0

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

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

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

1 に答える 1

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'))
于 2012-07-05T21:14:34.890 に答える