Форум сайта python.su
Вот два простых участка кода для демонстрации сути вопроса. Имеется две функции: start, она запускает цикл while, в теле которого что-то делается, и stop, которая прекращает этот цикл.
#
Здесь за жизнедеятельность цикла отвечает глобальная переменная flag:
def start(): global flag flag = 1 while flag: print 'cycle works' def stop(): global flag flag = 0
def start(): start.flag = 1 # аналогично start.__dict__['flag'] = 1 while start.flag: print 'cycle works' def stop(): start.flag = 0
Офлайн
253
Тут у вас недосказанность. Как вы будете выполнять stop если у вас выполняется start?
Это вопрос про многопоточное выполнение. Там этих механизмов в избытке.
start.flag тоже глобальная как и global flag. поэтому принципиальной разницы в обоих подходах нет. Второй немного сложнее но позволяет группировать флаги.
Оба подхода нежелательны.
Офлайн
63
doza_and
Да. У меня тоже был первый вопрос: где это можно применить? Может есть такой вариант, где без такой возможности не обойтись. Ну а применение глобальных переменных не есть хорошо никогда. С этим я согласен полностью. Хотя подход необычен…
Офлайн
18
doza_and
Все же инкапсулированный атрибут - меньшее зло, по сравнению с глобальной переменной
4kpt
Возможно не самая хорошая идея, но время уже позднее:
def run_foo(foo): ..... threading.Thread(target=foo).start() ..... run_foo.lck = threading.Lock() with run_foo.lck: run_foo(foo)
Офлайн
doza_andДа, я привел схематичные примеры, и не предугадал такой вопрос. Мой мозг “испорчен” PyS60 (Python for Symbian), там для многократного выполнения этих функций многопоточность не нужна.
Тут у вас недосказанность. Как вы будете выполнять stop если у вас выполняется start?Это вопрос про многопоточное выполнение. …
Офлайн
63
adray
Как-то очень замысловато…
Неужели нет аналога, чтобы заменить сей код?
Приведите, пожалуйста, действующий пример…
Отредактировано 4kpt (Дек. 1, 2012 11:50:27)
Офлайн
18
4kpt
Это я на ночь глядя ерунду написал
Думаю, всегда можно будет найти замену атрибутам функции. Какую - вопрос вкуса и здравого смысла.
Если нужен объект, который ведет себя как функция и иногда как класс с атрибутами, то подход с __dict__ позволит сэкономить пару строк, но я пока такого объекта не придумал.
Отредактировано adray (Дек. 1, 2012 14:49:59)
Офлайн