Skip to content

Commit

Permalink
use a threadsafe and atomic queue to contain uuids.
Browse files Browse the repository at this point in the history
  • Loading branch information
benoitc committed Feb 11, 2011
1 parent 7f5190c commit cf18543
Showing 1 changed file with 10 additions and 14 deletions.
24 changes: 10 additions & 14 deletions couchdbkit/client.py
Expand Up @@ -32,10 +32,10 @@

import base64
import cgi
from collections import deque
from itertools import groupby
from mimetypes import guess_type
import re
import threading
import time
import urlparse
import warnings
Expand Down Expand Up @@ -95,8 +95,7 @@ def __init__(self, uri='http://127.0.0.1:5984',
self.res = resource.CouchdbResource(uri,
pool_instance=pool_instance,
filters=filters)
self._uuids = []
self._lock = threading.Lock()
self._uuids = deque()

def info(self):
""" info of server
Expand Down Expand Up @@ -181,19 +180,16 @@ def next_uuid(self, count=None):
"""
return an available uuid from couchdbkit
"""
self._lock.acquire()
try:
if count is not None:
self._uuid_batch_count = count
else:
self._uuid_batch_count = self.uuid_batch_count
if count is not None:
self._uuid_batch_count = count
else:
self._uuid_batch_count = self.uuid_batch_count

self.uuids = self.uuids or []
if not self._uuids:
self._uuids = self.uuids(count=self._uuid_batch_count)["uuids"]
try:
return self._uuids.pop()
except IndexError:
self._uuids.extend(self.uuids(count=self._uuid_batch_count)["uuids"])
return self._uuids.pop()
finally:
self._lock.release()

def __getitem__(self, dbname):
return Database(self._db_uri(dbname), server=self)
Expand Down

0 comments on commit cf18543

Please sign in to comment.