mirror of
https://github.com/python/cpython.git
synced 2025-11-04 03:44:55 +00:00
Cleanup test_thread. CDB (Concurrent Database) support in BerkeleyDB is only
intended to have one writer and multiple readers so only run one.
This commit is contained in:
parent
89d996e5c2
commit
b3b4dbef20
1 changed files with 26 additions and 28 deletions
|
|
@ -81,6 +81,9 @@ class BaseThreadedTestCase(unittest.TestCase):
|
||||||
except db.DBLockDeadlockError:
|
except db.DBLockDeadlockError:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(currentThread().getName(), 'died from', e)
|
print(currentThread().getName(), 'died from', e)
|
||||||
|
else:
|
||||||
|
if verbose:
|
||||||
|
print(currentThread().getName(), "finished.")
|
||||||
|
|
||||||
def readerThread(self, *args, **kwargs):
|
def readerThread(self, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
|
|
@ -88,7 +91,9 @@ class BaseThreadedTestCase(unittest.TestCase):
|
||||||
except db.DBLockDeadlockError as e:
|
except db.DBLockDeadlockError as e:
|
||||||
if verbose:
|
if verbose:
|
||||||
print(currentThread().getName(), 'died from', e)
|
print(currentThread().getName(), 'died from', e)
|
||||||
|
else:
|
||||||
|
if verbose:
|
||||||
|
print(currentThread().getName(), "finished.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -107,14 +112,14 @@ class ConcurrentDataStoreBase(BaseThreadedTestCase):
|
||||||
print('\n', '-=' * 30)
|
print('\n', '-=' * 30)
|
||||||
print("Running %s.test01_1WriterMultiReaders..." % \
|
print("Running %s.test01_1WriterMultiReaders..." % \
|
||||||
self.__class__.__name__)
|
self.__class__.__name__)
|
||||||
|
print('Using:', self.homeDir, self.filename)
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
for x in range(self.writers):
|
wt = Thread(target = self.writerThread,
|
||||||
wt = Thread(target = self.writerThread,
|
args = (self.d, self.records),
|
||||||
args = (self.d, self.records, x),
|
name = 'the writer',
|
||||||
name = 'writer %d' % x,
|
)#verbose = verbose)
|
||||||
)#verbose = verbose)
|
threads.append(wt)
|
||||||
threads.append(wt)
|
|
||||||
|
|
||||||
for x in range(self.readers):
|
for x in range(self.readers):
|
||||||
rt = Thread(target = self.readerThread,
|
rt = Thread(target = self.readerThread,
|
||||||
|
|
@ -128,20 +133,18 @@ class ConcurrentDataStoreBase(BaseThreadedTestCase):
|
||||||
for t in threads:
|
for t in threads:
|
||||||
t.join()
|
t.join()
|
||||||
|
|
||||||
def _writerThread(self, d, howMany, writerNum):
|
def _writerThread(self, d, howMany):
|
||||||
#time.sleep(0.01 * writerNum + 0.01)
|
|
||||||
name = currentThread().getName()
|
name = currentThread().getName()
|
||||||
start = howMany * writerNum
|
start = 0
|
||||||
stop = howMany * (writerNum + 1) - 1
|
stop = howMany
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: creating records %d - %d" % (name, start, stop))
|
print(name+": creating records", start, "-", stop)
|
||||||
|
|
||||||
for x in range(start, stop):
|
for x in range(start, stop):
|
||||||
key = ('%04d' % x).encode("ascii")
|
key = ('%04d' % x).encode("ascii")
|
||||||
dbutils.DeadlockWrap(d.put, key, self.makeData(key),
|
d.put(key, self.makeData(key))
|
||||||
max_retries=20)
|
if verbose and x > start and x % 50 == 0:
|
||||||
if verbose and x % 100 == 0:
|
print(name+": records", start, "-", x, "finished")
|
||||||
print("%s: records %d - %d finished" % (name, start, x))
|
|
||||||
|
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: finished creating records" % name)
|
print("%s: finished creating records" % name)
|
||||||
|
|
@ -157,8 +160,6 @@ class ConcurrentDataStoreBase(BaseThreadedTestCase):
|
||||||
## c.delete()
|
## c.delete()
|
||||||
|
|
||||||
## c.close()
|
## c.close()
|
||||||
if verbose:
|
|
||||||
print("%s: thread finished" % name)
|
|
||||||
|
|
||||||
def _readerThread(self, d, readerNum):
|
def _readerThread(self, d, readerNum):
|
||||||
time.sleep(0.01 * readerNum)
|
time.sleep(0.01 * readerNum)
|
||||||
|
|
@ -174,25 +175,22 @@ class ConcurrentDataStoreBase(BaseThreadedTestCase):
|
||||||
self.assertEqual(self.makeData(key), data)
|
self.assertEqual(self.makeData(key), data)
|
||||||
rec = c.next()
|
rec = c.next()
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: found %d records" % (name, count))
|
print(name+": found", count, "records")
|
||||||
c.close()
|
c.close()
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
||||||
if verbose:
|
|
||||||
print("%s: thread finished" % name)
|
|
||||||
|
|
||||||
|
|
||||||
class BTreeConcurrentDataStore(ConcurrentDataStoreBase):
|
class BTreeConcurrentDataStore(ConcurrentDataStoreBase):
|
||||||
dbtype = db.DB_BTREE
|
dbtype = db.DB_BTREE
|
||||||
writers = 2
|
writers = 1
|
||||||
readers = 10
|
readers = 10
|
||||||
records = 1000
|
records = 1000
|
||||||
|
|
||||||
|
|
||||||
class HashConcurrentDataStore(ConcurrentDataStoreBase):
|
class HashConcurrentDataStore(ConcurrentDataStoreBase):
|
||||||
dbtype = db.DB_HASH
|
dbtype = db.DB_HASH
|
||||||
writers = 2
|
writers = 1
|
||||||
readers = 10
|
readers = 0
|
||||||
records = 1000
|
records = 1000
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -373,7 +371,7 @@ class ThreadedTransactionsBase(BaseThreadedTestCase):
|
||||||
finished = True
|
finished = True
|
||||||
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: Aborting transaction (%s)" % (name, val[1]))
|
print("%s: Aborting transaction (%s)" % (name, val))
|
||||||
txn.abort()
|
txn.abort()
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
|
@ -411,7 +409,7 @@ class ThreadedTransactionsBase(BaseThreadedTestCase):
|
||||||
print("%s: deleted records %s" % (name, recs))
|
print("%s: deleted records %s" % (name, recs))
|
||||||
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: Aborting transaction (%s)" % (name, val[1]))
|
print("%s: Aborting transaction (%s)" % (name, val))
|
||||||
txn.abort()
|
txn.abort()
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
|
@ -441,7 +439,7 @@ class ThreadedTransactionsBase(BaseThreadedTestCase):
|
||||||
finished = True
|
finished = True
|
||||||
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
except (db.DBLockDeadlockError, db.DBLockNotGrantedError) as val:
|
||||||
if verbose:
|
if verbose:
|
||||||
print("%s: Aborting transaction (%s)" % (name, val[1]))
|
print("%s: Aborting transaction (%s)" % (name, val))
|
||||||
c.close()
|
c.close()
|
||||||
txn.abort()
|
txn.abort()
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue