Я отправляю это как ответ, потому что я новый пользователь и Stack Overflow пока не позволяет мне голосовать.
Решение Сорина Сбарнеа у меня работает под OS X, Linux и Windows, за что я ему благодарен.
Однако tempfile.gettempdir () ведет себя одним способом под OS X и Windows, а другим - под другими some / many / all (?) * Nixes (игнорируя тот факт, что OS X также является Unix!). Для этого кода важна разница.
В OS X и Windows есть временные каталоги для конкретного пользователя, поэтому временный файл, созданный одним пользователем, не виден другому пользователю. Напротив, во многих версиях * nix (я тестировал Ubuntu 9, RHEL 5, OpenSolaris 2008 и FreeBSD 8) временный каталог для всех пользователей - / tmp.
Это означает, что когда файл блокировки создается на многопользовательской машине, он создается в / tmp, и только пользователь, который создает файл блокировки в первый раз, сможет запустить приложение.
Возможное решение - встроить текущее имя пользователя в имя файла блокировки.
Стоит отметить, что решение OP по захвату порта также будет некорректно работать на многопользовательской машине.