a- can someone clarify adbapi.ConnectionPool for me? i'm specifically wondering if connect/disconnect returns a handle to the pool and it the pool blocks until a handle is ready. i think it probably doesn't work that way. but i feel the need to check. b- has anyone ever used Defer.DeferredSemaphore with threads.deferToThread ? if so, how? all of my attempts thus far have not given the desired results specifically, i'm trying to have a scheduled job queue seed 1-50 'tasks' at once, each one using a seperate DB connection and running in a seperate thread. once they all complete, the job reschedules itself to run in the future. i'm probably approaching this problem wrong. so feel free to tell me i'm an idiot and point in a better direction. the closest thing I could think of was: 1- imports= [ self.semaphore.run( threads.deferToThread ( self.import_request, queue_item ) ) for queue_item in queue_import ] 2- imports= [ threads.deferToThread( self.semaphore.run ( self.import_request, queue_item ) ) for queue_item in queue_import ] neither of which work as: 1- gives me imports all at once, as deferToThread immediately returns a deferred object 2- self.import_request blocks , as its not in its own thread