В моем серверном процессе это выглядит так:
Основные бэкэнд-процессы:
Процессы Огромный список файлов и запись их в MySQL.
На каждые 500 сделанных файлов он записывает "Отчет о проделанной работе" в отдельный файл /var/run/progress.log
, как этот "200/5000 файлов"
Он обрабатывается с несколькими детьми с 4 детьми, каждый из которых обязательно работает в отдельном файле.
Процесс веб-сервера:
/var/run/progress.log
каждые 10 секунд через Ajax и отчитайтесь о шаге выполнения.При обработке очень большого списка файлов (например, более 3 ГБ архива) процессы блокируются примерно через 2 часа обработки.
Я не могу найти, что происходит. Означает ли это, что /var/run/progress.log
вызвало блокировку ввода-вывода?
В python на Linux это не должно блокироваться, однако попробуйте использовать модуль os
os.open(file, os.O_NONBLOCK | os.O_RDONLY)
и убедитесь, что вы закрываете файл fh.close()
, поскольку Python - это немного ленивая очистка файлов.
Быстрая консультация, убедитесь, что вы действительно закрываете файл.
Итак, ВСЕГДА используйте блок try-except-final для этого
Помните, что contents заключительного блока будут ВСЕГДА выполняться, что предотвратит много боли в голове:)