Многопоточный доступ к файлу

импортировать следующее:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui, QtCore

В классе Ui_MainWindow (объект) заменить объект на QWidget:

Ui_MainWindow(QWidget)
11
задан Bill Michell 20 November 2008 в 11:15
поделиться

7 ответов

FileChannel находится в ориентированной на многопотоковое исполнение теории. От javadoc:

Каналы файла безопасны для использования несколькими параллельными потоками. Близкий метод может быть вызван в любое время, как указано Канальным интерфейсом. Только одна операция, которая включает положение канала или может изменить размер его файла, может произойти в любой момент времени; попытки инициировать секунду, которую такая операция, в то время как первое все еще происходит, заблокирует до первой операции, завершаются. Другие операции, в особенности те, которые занимают явную позицию, могут продолжить двигаться одновременно; делают ли они на самом деле так зависит от конкретной реализации и является поэтому неуказанным.

Если можно использовать их, то можно использовать встроенную синхронизацию, вместо того, чтобы иметь необходимость записать собственное.

6
ответ дан 3 December 2019 в 08:31
поделиться

Я рассмотрел бы синхронизацию в этом случае. Предположите, что 2 потока (t1 и t2) открывают файл одновременно и начинают писать в него. Изменения, выполненные первым потоком, являются overwrited вторым потоком, потому что второй поток является последним для сохранения изменений в файле. Когда поток t1 пишет в файл, t2 должен ожидать, до t1 концы это - задача, прежде чем он сможет открыть его.

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

5
ответ дан 3 December 2019 в 08:31
поделиться

Будучи синхронным не важен, Вы могли иметь свое устройство записи, работающее в его собственном потоке, и позволить другим потокам стоять в очереди записи в файл. Хотя я думаю, что первая вещь рассмотреть состоит в том, является ли запись в файл действительно, что Вы хотите сделать. Особенно в ситуациях интенсивного трафика, имея много диска ввод-вывод не может быть очень эффективным.

2
ответ дан 3 December 2019 в 08:31
поделиться

Если бы Вы хотели несколько средств чтения и одно устройство записи, то Вы искали бы Блокировку Записи Чтения или Взаимное исключение Записи Чтения.

Но Вы хотите несколько устройств записи и одно средство чтения. Как Вы знаете, что эти устройства записи не перезапишут каждые данные других? Они являются так или иначе отдельными?

1
ответ дан 3 December 2019 в 08:31
поделиться

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

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

0
ответ дан 3 December 2019 в 08:31
поделиться

Вам нужна синхронизация (блокировка), если у Вас есть соединение средств чтения и устройств записи или устройств записи и устройств записи. Если у Вас только есть читатели, Вам не нужна никакая синхронизация.

Вы не хотите два процесса, пишущие в тот же файл или один процесс, пишущий файл, который другой читает.

0
ответ дан 3 December 2019 в 08:31
поделиться

в этом случае необходима синхронизация. Filechannel полезен для предотвращения модифицированных файлов процессами вне JVM: не так для приложений, которые включают несколько потоков, пишущих в один файл. От (дальше вниз в) Javadoc для Filechannel:

файловые замки удерживаются от имени Вся виртуальная машина Java. Они есть не подходит для контроля доступа к файл несколькими потоками в пределах Та же виртуальная машина.

См. на этот пост для краткого обсуждения стратегий для обмена файлами в письме между потоками.

0
ответ дан 3 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: