python2.6, threads и запись в файл (соблюдаем очередь)

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2023
Статус: ☮ PEACE ☮
ОС: открытая и свободная

python2.6, threads и запись в файл

Сообщение Stauffenberg »

Всем привет.


Как проще всего решить проблему? Есть 10 threads, которые после окончания своей работы, записывают пару строк в файл. По причине того, что выполняются они параллельно, процесс записи в файл превращается в мясорубку.

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


Заранее благодарен за советы.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: python2.6, threads и запись в файл

Сообщение NickLion »

Если операции записи не особо активные (например, по окончании работы), то так проще, наверное:
1. lock
2. write to file
3. flush
4. unlock

Если частые записи, то, имхо, лучше завести отдельный поток записи в файл, которому просто посылать сообщение, которое нужно записать.
Спасибо сказали:

Аватара пользователя
Stauffenberg
Сообщения: 2023
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: python2.6, threads и запись в файл

Сообщение Stauffenberg »

Возможно есть решение от самих python-разработчиков? Подобная ситуация с threading встречается постоянно.

NickLion писал(а):
20.02.2015 18:07
Если операции записи не особо активные (например, по окончании работы), то так проще, наверное:
1. lock
2. write to file
3. flush
4. unlock

Это первое о чем я подумал, но на python'е я этого еще не реализовывал. За пример кода был бы очень признателен (:


NickLion писал(а):
20.02.2015 18:07
Если частые записи, то, имхо, лучше завести отдельный поток записи в файл, которому просто посылать сообщение, которое нужно записать.

Т.е. все потоки передают свои строки обратно, и уже там (после обработки), записываются в файл? Безусловно это экономит I/O (в моем случае это критично), но тогда нужно запрограммировать обработчик этих записей.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: python2.6, threads и запись в файл

Сообщение NickLion »

К сожалению, python не знаю. Так, правил несколько скриптов по образу и подобию. Поэтому не подскажу о наличии готовых решений. Я такое (с отдельным потоком для записи) делал, но это было C++/boost, так что не особо поможет, наверное.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18978
Статус: ✡ иностранный агент
ОС: Debian GNU/Linux

Re: python2.6, threads и запись в файл

Сообщение Bizdelnick »

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: