Найти - Пользователи
Полная версия: Выполнение скрипта при наличии файла в директории
Начало » Python для новичков » Выполнение скрипта при наличии файла в директории
1 2 3
sp3
Можно использовать потоки. В главном крутится код для работы с файлами, во втором, например, консоль ждет слова 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()

вместо консоли можно использовать гуи, ждать команды через сокет етс.
Senhion
sp3
Можно использовать потоки. В главном крутится код для работы с файлами, во втором, например, консоль ждет слова close для завершения работы

Спасибо огромное - этот пример прям почти то что нужно, а про потоки в python подробнее где можно почитать? для того что бы я не задавал глупых вопросов про t.start и t.join
fata1ex
http://docs.python.org/library/threading.html
Senhion
Господа в теме потоков пока плаваю.
Объясните пожалуйста что делает метод .join() ?
в описалове к нему если кратко то: Поток, который вызывает этот метод, приостанавливается, ожидая завершения потока, чей метод вызван.
т.е. если я пишу t.join() то поток t приостанавливается и? что происходит дальше?
minotavr_x86
Я бы сделал через сигналы
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'
sp3
Senhion
т.е. если я пишу t.join() то поток t приостанавливается и? что происходит дальше?
приостанавливается не поток t, а тот из которого ты вызываешь t. В твоем случае приостанавливается главный поток и ждет пока 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 'конец программы'
py.user.next
Senhion
Объясните пожалуйста что делает метод .join() ?
не даёт вызывающему потоку завершиться раньше вызываемого
Senhion
т.е. в коде
t = threading.Thread(target=thrInput)
t.start()
main()
t.join()

функция main() запускается в главном потоке? но пока она не отработает мы не сможем выполнить t.join()?
а если сможем то тогда выполнение main() приостановится?
minotavr_x86
Senhion
функция main() запускается в главном потоке? но пока она не отработает мы не сможем выполнить t.join()?
а если сможем то тогда выполнение main() приостановится?
Функция main выполнится и поcле этого главный поток ждет завершения потока t
Senhion
Хм… все равно что то буксую

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

и собственно хочу увидеть поток цифер до того как я с клавиатуры введу close
а получается, что выполняется один цикл и дальше все стоит и ждет ввода если ввод происходит то выполняется еще один цикл… вроде все понятно… а как сделать то что я хочу?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB