Форум сайта python.su
18
Можно использовать потоки. В главном крутится код для работы с файлами, во втором, например, консоль ждет слова close для завершения работы
import time import threading FLAG_EXIT = False def main(): while not FLAG_EXIT: print 'ваш код в этот блок' time.sleep(3) print 'выход из цикла' def thrInput(): global FLAG_EXIT while 1: if raw_input('>>>').lower() == "close": FLAG_EXIT = True print 'ожидание завершения операции с файлом' return else: print 'write "close"' t = threading.Thread(target=thrInput) t.start() main() t.join()
Офлайн
0
sp3
Можно использовать потоки. В главном крутится код для работы с файлами, во втором, например, консоль ждет слова close для завершения работы
Офлайн
52
Офлайн
0
Господа в теме потоков пока плаваю.
Объясните пожалуйста что делает метод .join() ?
в описалове к нему если кратко то: Поток, который вызывает этот метод, приостанавливается, ожидая завершения потока, чей метод вызван.
т.е. если я пишу t.join() то поток t приостанавливается и? что происходит дальше?
Офлайн
0
Я бы сделал через сигналы
import signal from time import sleep def stop(signum, frame): while True: if a == 'not_file': raise IOError sleep(4) signal.signal(signal.SIGINT, stop) signal.signal(signal.SIGTERM, stop) try: while True: a = 'work' #какая то обработка файла sleep(1000) a = 'not_file' sleep(10) except IOError: print 'Stop server'
Офлайн
18
Senhionприостанавливается не поток t, а тот из которого ты вызываешь t. В твоем случае приостанавливается главный поток и ждет пока t умрет.
т.е. если я пишу t.join() то поток t приостанавливается и? что происходит дальше?
import time import threading def thrInput(): print 'поток стартует' time.sleep(5) print 'поток сейчас умрет' t = threading.Thread(target=thrInput) print 'делаем start' t.start() time.sleep(2) print 'делаем join' t.join() print 'конец программы'
Офлайн
857
Senhionне даёт вызывающему потоку завершиться раньше вызываемого
Объясните пожалуйста что делает метод .join() ?
Офлайн
0
т.е. в коде
t = threading.Thread(target=thrInput) t.start() main() t.join()
Офлайн
0
SenhionФункция main выполнится и поcле этого главный поток ждет завершения потока t
функция main() запускается в главном потоке? но пока она не отработает мы не сможем выполнить t.join()?
а если сможем то тогда выполнение main() приостановится?
Отредактировано minotavr_x86 (Сен. 12, 2012 15:17:47)
Офлайн
0
Хм… все равно что то буксую 
import threading FLAG_STOP = False def thrInput(): global FLAG_STOP while True: if raw_input('<<<').lower() == "close": FLAG_STOP = True return t1 = threading.Thread(target = thrInput) t1.start() while not FLAG_STOP: a = a + 1 print a
Отредактировано Senhion (Сен. 14, 2012 10:13:33)
Офлайн