импортировать следующее:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui, QtCore
В классе Ui_MainWindow (объект) заменить объект на QWidget:
Ui_MainWindow(QWidget)
FileChannel находится в ориентированной на многопотоковое исполнение теории. От javadoc:
Каналы файла безопасны для использования несколькими параллельными потоками. Близкий метод может быть вызван в любое время, как указано Канальным интерфейсом. Только одна операция, которая включает положение канала или может изменить размер его файла, может произойти в любой момент времени; попытки инициировать секунду, которую такая операция, в то время как первое все еще происходит, заблокирует до первой операции, завершаются. Другие операции, в особенности те, которые занимают явную позицию, могут продолжить двигаться одновременно; делают ли они на самом деле так зависит от конкретной реализации и является поэтому неуказанным.
Если можно использовать их, то можно использовать встроенную синхронизацию, вместо того, чтобы иметь необходимость записать собственное.
Я рассмотрел бы синхронизацию в этом случае. Предположите, что 2 потока (t1 и t2) открывают файл одновременно и начинают писать в него. Изменения, выполненные первым потоком, являются overwrited вторым потоком, потому что второй поток является последним для сохранения изменений в файле. Когда поток t1 пишет в файл, t2 должен ожидать, до t1 концы это - задача, прежде чем он сможет открыть его.
Кроме того, если Вы заботитесь о последнем обновлении файла, необходимо синхронизировать потоки записи с потоком, который читает файл так, чтобы, если существует поток, пишущий файл, поток чтения должен ожидать.
Будучи синхронным не важен, Вы могли иметь свое устройство записи, работающее в его собственном потоке, и позволить другим потокам стоять в очереди записи в файл. Хотя я думаю, что первая вещь рассмотреть состоит в том, является ли запись в файл действительно, что Вы хотите сделать. Особенно в ситуациях интенсивного трафика, имея много диска ввод-вывод не может быть очень эффективным.
Если бы Вы хотели несколько средств чтения и одно устройство записи, то Вы искали бы Блокировку Записи Чтения или Взаимное исключение Записи Чтения.
Но Вы хотите несколько устройств записи и одно средство чтения. Как Вы знаете, что эти устройства записи не перезапишут каждые данные других? Они являются так или иначе отдельными?
Однажды несколько совместно используемых данных доступа Потоков затем Синхронизация необходима. Если несколько потоков запишут в тот же файл без некоторой формы блокировки, то потенциально Вы закончите с потерянной проблемой обновления.
Чтение не является столь же большой проблемой при всех обстоятельствах, таким образом, необходимо рассмотреть..., если поток читает файл и в то же время, другой поток обновляет файл, чтение распараллеливает потребность знать об изменении? Раз так необходимо заблокировать файл для потока чтения также.
Вам нужна синхронизация (блокировка), если у Вас есть соединение средств чтения и устройств записи или устройств записи и устройств записи. Если у Вас только есть читатели, Вам не нужна никакая синхронизация.
Вы не хотите два процесса, пишущие в тот же файл или один процесс, пишущий файл, который другой читает.
в этом случае необходима синхронизация. Filechannel полезен для предотвращения модифицированных файлов процессами вне JVM: не так для приложений, которые включают несколько потоков, пишущих в один файл. От (дальше вниз в) Javadoc для Filechannel:
файловые замки удерживаются от имени Вся виртуальная машина Java. Они есть не подходит для контроля доступа к файл несколькими потоками в пределах Та же виртуальная машина.
См. на этот пост для краткого обсуждения стратегий для обмена файлами в письме между потоками.