Форум XBMC \ Kodi Russia
   

Вернуться   Форум XBMC \ Kodi Russia > Разработка > Поддержка локальной разработки модулей

Ответ
 
Опции темы Опции просмотра
Старый 08.01.2018, 17:18   #41
Roman_V_M
Senior Member
 
Аватар для Roman_V_M
 
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,893
По умолчанию

Да, по симптомам явно похоже на race condition. Я предвидел такую возможность, но меня ввело в заблуждение утверждение об атомарности операции shutil.move(), которая оказалась нифига не атомарной. Можно попробовать сделать вот так:
Код:
    def flush(self):
        """
        Save storage contents to disk

        This method saves new and changed :class:`Storage` contents to disk
        and invalidates the Storage instance. Unchanged Storage is not saved
        but simply invalidated.
        """
        contents = pickle.dumps(self._storage)
        if self._hash is None or hashlib.md5(contents).hexdigest() != self._hash:
            tmp = self._filename + '.tmp'
            try:
                start_time = time.time()
                while os.path.exists(tmp):
                    xbmc.sleep(100)
                    if time.time() - start_time > 2.0:
                        raise TimeoutError(
                            'Exceeded timeout for saving {0}!'.format(self)
                        )
                with open(tmp, 'wb') as fo:
                    fo.write(contents)
            except:
                if os.path.exists(tmp):
                    os.remove(tmp)
                raise
            else:
                move(tmp, self._filename)
        del self._storage
т.е. ждать, пока предыдущий процесс не удалит временный файл.

А вообще, в 3-й версии я собираюсь сильно переделать библиотеку. Основные изменения:
- Из класса Plugin убрано всё, кроме собственно маршрутизации вызовов плагина.
- Добавлен класс RoutedPlugin для маршрутизации с "красивыми" УРЛ-ами а ля Flask.
- Код портирован на Питон 3.

Задача - сделать код более долгоживущим, т. к. излишняя абстракция часто ломается и требует постоянных правок, а потом забросить его нафик, поскольку на поддержку нет ни времени, ни желания.
__________________
Координатор русского перевода Kodi:
https://www.transifex.com/projects/p/kodi-main/
------------------------------
Raspberry PI 2 + LibreELEC 8 (Kodi 17)
Samsung Galaxy Tab A 10.1 + Kodi 17 for Android
------------------------------
Читаем и пополняем Википедию форума: http://xbmc.ru/wiki
------------------------------
На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум.
Roman_V_M на форуме   Ответить с цитированием
 

Ответ
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
script.module.torrent2http - движок стримминга торрентов. -=Vd=- Помощь по плагинам 82 03.01.2018 22:14
PyXBMCt - фреймворк для создания интерфейса плагинов Roman_V_M Поддержка локальной разработки модулей 22 28.03.2017 09:01
script.module.remote-pdb: удаленный консольный отладчик для плагинов Roman_V_M Поддержка локальной разработки модулей 18 06.10.2016 14:42
[All] script.module.antizapret - Обход блокировок для плагинов nightik Помощь по плагинам 24 15.06.2016 20:43
Библиотека для фото runkov Подсказки, описания и FAQ по XBMC 5 22.10.2010 11:29


Текущее время: 21:27. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.