TextMate Python связка неблокирующая - PullRequest
0 голосов
/ 11 июля 2011

Я создал пакет в TextMate для перезапуска процесса Supervisor, связанного с текущим проектом Django. Выполнение кода в интерпретаторе Python успешно перезапускает процесс без блокировки, однако, когда я использую его в качестве пакета TextMate (настроен на запуск при каждом сохранении файла .py), он блокирует графический интерфейс на ~ 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()

1 Ответ

0 голосов
/ 06 июля 2012

Возможно, это слишком поздно, но вы хотели бы закрыть его рано, установив close_fds = True в аргумент Popen. Если он указан, он не ожидает ответа.

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