how to start a python script only once
news1234 at free.fr
Sun Mar 14 15:30:13 CET 2010
Francesco Bochicchio wrote:
> On 13 Mar, 19:45, News123 <news1... at free.fr> wrote:
>> 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
> 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