Portál AbcLinuxu, 20. dubna 2024 00:41


Dotaz: Python a vytvoření pojmenovaného mutexu ?

9.3.2006 14:08 Dunric | skóre: 21
Python a vytvoření pojmenovaného mutexu ?
Přečteno: 57×
Odpovědět | Admin
Celkem běžná situace - chtěl bych ošetřit, aby se mi pythonní skript spouštěl pouze jednou. Známé a celkem elegantní řešení je vytvoření mutexu s unikátním jménem, kdy pokus o jeho další vytvoření např. v jiné instanci vždy selže až do jeho odstranění. Sice v pythonu nejsem moc "kovaný", ale modul mutex a jeho třída mě moc nenadchly. Věděl by někdo jak na to ?

Předem díky.

In the garden sleeps a messenger ·
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.3.2006 20:13 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Python a vytvoření pojmenovaného mutexu ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sorry, ale vážně by žádný pythonista nevěděl ? Určitě to musí jít řešit i jinak než přes zámkové soubory, kterým bych se rád vyhnul.
In the garden sleeps a messenger ·
13.3.2006 00:44 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Python a vytvoření pojmenovaného mutexu ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co si člověk sám neudělá, to nemá ;-)

Pokud by to náhodou někoho zajímalo, problém jsem nakonec vyřešil jednodušeji přes semafory jako jednoho z nástrojů IPC. Sice to není tak přenositelné jako souborové nebo adresářové zámky, ale zase je to čistě paměťová operace.

from pyipc import *
from sys import stderr

# Unikatni klic
SEM_GID = 123456789

try:
  semlock = ipcmod.semget(SEM_GID, 1, IPC_CREAT | IPC_EXCL)

except:
  stderr.write('Another instance already running !')
  exit(1)

...


ipcmod.semremove(semlock)

Docela mě to překvapilo, ale standardní moduly pythonu neobsahují wrapper kolem většiny fcí k System V IPC. Jednu z implementací lze najít např. zde, ale tohle by už mělo být v základu a ne ta zmršenina v threading.

In the garden sleeps a messenger ·

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.