how to start a python script only once

News123 news1234 at free.fr
Sun Mar 14 15:30:13 CET 2010


Hi Francesco,

Francesco Bochicchio wrote:
> On 13 Mar, 19:45, News123 <news1... at free.fr> wrote:
>> Hi,
>>
>> I'd like to make sure, that a certain python program will only be run
>> once per host. (linux/windows)
>>
>> so if the program is started a second time it should just terminate and
>> let the other one run.
>>
>> This does not have to be the fastest solution, but it should be reliable.
>>
>> I have a few ideas, but wonder, which one is the most common
>>
>> My ideas so far:
>>
>> pid file and file locking
>> --------------------------
>> create a file like program.pid  with the pid of the running program an
>> use file locking to avoid race connditions.
>>
>> However I currently don't know how to do file locking under windows
>> and I don't know how to do file lockng with python and linux.
>> I'll start googling.
>>
>> sqlite and locking
>> --------------------
>> quite some time ago I used a mysql table and locking as an inter-host mutex.
>>
>> Perhaps sqlite would be good enough for an inter process mutex for
>> processes on the same host, but I don't know it well enough.
>>
>> interprocess mutex
>> --------------------
>> well I even don't know whether something like this exists on linux / windows
>>
>> Thanks in advanced for any tips
>>
>> N
> 
> Apart from file, a portable solution would be to bind to an unused
> porta and assume that finding the port busy means that your program is
> already running on the port.
Yes, this should work.
I assume in this case the bind() function would handle the race condition.
> 
> On recent python installations there is the multiprocessing module
> which provides process-level semaphores, but I don't know how portable
> they are.

Yes, there are process level semaphores in multiprocesing, but if I
understood well, they would either require a common parent process or
one process, which were acting as a manager, but then the question would
be how to make sure, that the manager process were started only once. (
bind port? )



More information about the Python-list mailing list