модули принудительной перезагрузки mod_wsgi

Вы можете использовать класс string.Formatter() для разбора полей в строке с помощью метода Formatter.parse() :

from string import Formatter

fieldnames = [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]

Демо:

>>> from string import Formatter
>>> yourstring = "path/to/{self.category}/{self.name}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['self.category', 'self.name']
>>> yourstring = "non-keyword {keyword1} {{escaped brackets}} {} {keyword2}"
>>> [fname for _, fname, _, _ in Formatter().parse(yourstring) if fname]
['keyword1', 'keyword2']

Вы можете проанализировать эти имена полей дальше; для этого вы можете использовать функцию str._formatter_field_name_split() (Python 2) / _string.formatter_field_name_split() (Python 3) (эта внутренняя деталь реализации не раскрывается иначе, Formatter.get_field() использует ее внутренне). Эта функция возвращает первую часть имени имени, ту, которая будет отображаться в аргументах, переданных в str.format(), плюс генератор для остальной части поля.

Генератор дает (is_attribute, name) кортежи; is_attribute истинно, если следующее имя должно рассматриваться как атрибут, false, если это элемент для поиска с помощью obj[name]:

try:
    # Python 3
    from _string import formatter_field_name_split
except ImportError:
    formatter_field_name_split = str._formatter_field_name_split
from string import Formatter

field_references = {formatter_field_name_split(fname)[0]
 for _, fname, _, _ in Formatter().parse(yourstring) if fname}

Демонстрация:

>>> from string import Formatter
>>> from _string import formatter_field_name_split
>>> yourstring = "path/to/{self.category}/{self.name}"
>>> {formatter_field_name_split(fname)[0]
...  for _, fname, _, _ in Formatter().parse(yourstring) if fname}
{'self'}

Учтите, что эта функция является частью внутренних деталей реализации класса Formatter() и может быть изменена или удалена с Python без уведомления и может быть даже недоступна в других реализациях Python.

13
задан Ian 20 April 2009 в 13:04
поделиться

2 ответа

Документация mod_wsgi по перезагрузке кода - ваш лучший выбор для ответа.

6
ответ дан 1 December 2019 в 20:11
поделиться

Следует выделить ссылку:

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

. Также следует подчеркнуть, что в системах UNIX необходимо использовать режим демона mod_wsgi и реализовать монитор кода, описанный в документации. Опция перезагрузки всего процесса не будет работать для встроенного режима mod_wsgi в системах UNIX. Хотя в системах Windows единственным вариантом является встроенный режим, можно с помощью небольшого обмана сделать то же самое, запустив внутренний перезапуск Apache из сценария мониторинга кода. Это также описано в документации.

13
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: