Jeff McNeil <[EMAIL PROTECTED]> wrote:
>  I've got a rather large log processing job here that has the same
>  requirement.  I process and sort Apache logs from an 8-way cluster. I
>  sort and calculate statistics in 15-minute batch jobs. Only one copy
>  should run at once.
> 
>  I open a file and lock it via something like this:
> 
>  import fcntl
> 
>  fhandle = file("ourlockfile.txt", "w")
> 
>  try:
>      fcntl.lockf(fhandle.fileno(), fcntl.LOCK_EX|fcntl.LOCK_NB)
>  except IOError, e:
>      if e.errno == errno.EAGAIN:
>          print >>sys.stderr, "exiting, another copy currently running"
>      else:
>          raise
> 
>  I've got it wrapped in a 'FileBasedLock' class that quacks like Lock
>  objects in the threading module.

That is the traditional unix locking method.  Note that it may not
work if you are writing the lock file to an NFS mount!

Traditionally you write your os.pid() to the file also.  You can then
send a signal to the running copy, detect stale lock files etc.

-- 
Nick Craig-Wood <[EMAIL PROTECTED]> -- http://www.craig-wood.com/nick
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to