lorien
Под виндой ваш код, по крайней мере тот, что в начале топика, тоже может глючит. Например, процесс проверил, что файла блокировки нет и начал его создавать. Но между тем как он проверил и тем, как он начал создавать файл, другой процесс уже успел создать файл. У вас будут запущены два процесса и оба будут думать, что они работают в единственном экземпляре.
Спасибо, первая конструктивная критика моего кода, а не предложение сделать (по другому, как у всех, как принято 50 лет).
lorien
Я такую штуку пользую: https://github.com/lorien/grab/blob/master/grab/tools/lock.py#L58
При внимательном изучении этого кода обнаружил одну странность. Если в Unix части перехватываются вообще ВСЕ исключения от flock(), что не хорошо, но частично оправданно, так как в разных версиях там генерируются разные типы исключений. То в Windows части перехватывается только одно исключение от LockFileEx() и у него проверяется код ошибки. Получается, что если блокировка не получилась по причине наличия другой блокировки, то возвращаем False и считаем, что блокировка не удалась. А, если блокировка не получилась по какой то другой причине, то возвращаем True и считаем, что блокировка удалась ;-(
Alen
Вообще то в первом же ответе.
Alen
В Linux/MacOS X/BSD работать не будет
Извините, не понимаю, как я пропустил эту фразу…