LINUX.ORG.RU

алгоритм очереди

 ,


0

1

привет, изучал неделю питон. таки написал ненужно для людей с «ограниченными возможностями» которые не умеют TCP в 2015году
суть в том, что в директорию приходят файлы - отправляются по TCP и обратно так же.
но гложет меня алгоритм очереди обработки этих файлов.
я ни разу не программист, такие вещи никогда не изучал - придумал явно ерунду, суть такова:
http://pastebin.com/TU5ez2vF
mkdir input/
touch ./input/{a..z}.txt
python queue.py

я создаю словарь «игнорируемых» и массив «очередь»
1

список файлов из директории читается раз в 0.1сек
если имени файла нет в массиве «очередь»
  и если файл в «очереди» не более 10сек + длина «очереди»
    добавить имя в конец массива «очередь»
иначе ничего не делать
2
в другом потоке раз в 0.1сек читаем первый элемент массива «очередь»
если файл прочитан то 
  удаляем (файл из директории и) имя из массива
иначе удаляем имя файла из массива
3
ещё один поток раз в 5сек 
удаляет все ключи из словаря «игнорируемых»
  если они там более 5минут
я не рассчитываю что кто то поймет описание, или код.
хотя бы скажите какие слова гуглить, чтоб понять как делают.

питонизмы я думаю ещё подправят,

первое что бросается в глаза - чтение каталога 10 раз/сек. Есть-же всяческие inotify и иже с ними incron`ы - и питоновские оплётки над ними тоже есть

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

на мой взгляд зря (рановато) примешана многопоточность

хотя бы скажите какие слова гуглить, чтоб понять как делают.

нууу очень напоминает софт старого-доброго ФИДО :-)

MKuznetsov ★★★★★ ()
Ответ на: комментарий от MKuznetsov

Есть-же всяческие inotify
можно сделать мелкую однофайловую базу

вот по этому inotify не использую (ну и потому что в питоне это тормозное. очень.) ещё оно пишет изменения на файловой системе уже после запуска. в начале нужно стартовать получения списка файлов через os.listdir.

ни разу не подумано, а что будет при рестарте скрипта

при удачном чтении файла он удаляется, при удачном удалении отправляется.
если после удаления и до отправки программа перезапустилась, файл потеряется.
что делать если файл потерялся не моя проблема. иначе нужно будет sql базу вести этих файлов и их содержимого.
нет ответа по TCP для потерявшегося файла? создадут новый после таймаута.

на мой взгляд зря (рановато) примешана многопоточность

почему?

system-root ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.