Форум сайта python.su
16
Прошу дать совет по следующему вопросу:
У меня есть программа (написана на freepascal), хочу переписать ее на Python. Суть программы сканить папки на наличие файлов с нужным расширением, их разборе и импорте в БД. Она работает упрощенно так:
1) Находим файл.
2) Обрабатываем.
3) Перемещаем.
4) Ищем следующий файл.
Я задумался над оптимизацией, а точнее, чтобы обрабатывать по 5 (например) файлов параллельно (независимо).
Я понимаю, что можно запустить нити(multi-threads) или (multi-processing), которые будут работать независимо…
Но как они могут между собой взаимодействовать и понимать кому какой файл? Каким образом можно это осуществить?
P.S. Первое, что приходит в голову - это использовать threads и глобальный список уже обрабатывающихся файлов. То есть поток находит файл, проверяет есть ли он в списке. Если есть, то ищет дальше, если нет, то добавляет его в список и начинает разбирать, а после разбора удалять из списка. Но… терзают сомнения.
Отредактировано alexbadaloff (Апрель 11, 2013 16:12:06)
Офлайн
20
Один поток ищет файлы, складывает их в очередь. n-количество потоков ждут появление файла в очереди, забирают, обрабатывают.
Отредактировано Soteric (Апрель 11, 2013 16:20:43)
Офлайн
16
Спасибо. Вроде понял. Буду пробовать.
Офлайн
253
1 Часто узкое звено не обработчик файла а субд. Рекомендую сначала убедиться что игра стоит свеч.
2 Задачи по обработке файлов иногда удобно решать build системами.
если любите питон используйте scons: http://www.scons.org/
SConstruct
bld = Builder(action = 'foobuild < $SOURCE > $TARGET', suffix = '.done', src_suffix = '.myfile') env = Environment(BUILDERS = {'Foo' : bld}) filelist=[....] res=[env.Foo(i) for i in filelist]
Отредактировано doza_and (Апрель 11, 2013 19:20:11)
Офлайн
16
Насколько я понял scons не поддерживает python3.3, который я использую.
Но информация интересная.
Офлайн
253
:)
alexbadaloffЭто проблема поставить питон 2.7? Это быстрый и эффективный путь, со временем и сконс переползет на python 3. Конечно правильный путь внести свой вклад и принять участие в переписывании scons на трешку.
python3.3, который я использую
Офлайн
16
doza_and
Это проблема поставить питон 2.7? Это быстрый и эффективный путь, со временем и сконс переползет на python 3. Конечно правильный путь внести свой вклад и принять участие в переписывании scons на трешку.
Офлайн
253
alexbadaloffПожелаю успеха.
когда будут за плечами хотя бы пару лет
Офлайн
16
Благодарю за хороший ответ. Это именно то, что я и хотел узнать.
Офлайн