Если я открываю и читаю файл, который периодически записывается, может ли произойти тупик ввода-вывода?

1

В моем серверном процессе это выглядит так:

Основные бэкэнд-процессы:

  • Процессы Огромный список файлов и запись их в MySQL.

  • На каждые 500 сделанных файлов он записывает "Отчет о проделанной работе" в отдельный файл /var/run/progress.log, как этот "200/5000 файлов"

  • Он обрабатывается с несколькими детьми с 4 детьми, каждый из которых обязательно работает в отдельном файле.

Процесс веб-сервера:

  • Прочитайте вывод /var/run/progress.log каждые 10 секунд через Ajax и отчитайтесь о шаге выполнения.

При обработке очень большого списка файлов (например, более 3 ГБ архива) процессы блокируются примерно через 2 часа обработки.

Я не могу найти, что происходит. Означает ли это, что /var/run/progress.log вызвало блокировку ввода-вывода?

  • 0
    Заполняете ли вы файл /var/run/progress.log самостоятельно или используете какой-либо стандартный модуль регистрации?
  • 0
    Сам по себе, но записи всегда закрыты сразу. Они как пишут каждые 3-5 секунд, в зависимости от размера файла.
Показать ещё 3 комментария
Теги:
performance
io
deadlock

2 ответа

0
Лучший ответ

В python на Linux это не должно блокироваться, однако попробуйте использовать модуль os

os.open(file, os.O_NONBLOCK | os.O_RDONLY)

и убедитесь, что вы закрываете файл fh.close(), поскольку Python - это немного ленивая очистка файлов.

http://docs.python.org/library/os.html

0

Быстрая консультация, убедитесь, что вы действительно закрываете файл.

Итак, ВСЕГДА используйте блок try-except-final для этого

Помните, что contents заключительного блока будут ВСЕГДА выполняться, что предотвратит много боли в голове:)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню