В Linux используем такую конструкцию, мне кажется, что решение кроссплатформенное, хотя я не проверял
    def handle(self, *args, **options):
        from lockfile import LockFile
        import tempfile
        import os
        lock = LockFile(os.path.join(tempfile.gettempdir(), '%s_command' % self.__class.__name__))
        if not lock.is_locked():
            lock.acquire()
            try:
                self.action()
            except Exception, e:
                print 'Error in action!'
            lock.release()
        else:
            print 'Another copy already runs'