This commit is contained in:
yumoqing 2022-02-08 12:27:23 +08:00
parent eb105a7efa
commit 305215a435

View File

@ -4,17 +4,17 @@ import random
from appPublic.background import Background from appPublic.background import Background
class ThreadWorkers: class ThreadWorkers:
def __init__(self, worker_cnt=10): def __init__(self, max_workers=10):
self.semaphore = threading.Semaphore(value=worker_cnt) self.semaphore = threading.Semaphore(value=max_workers)
self.co_worker = 0 self.co_worker = 0
def _do(self, func, *args, **kwargs): def _do(self, func, *args, **kwargs):
self.semaphore.acquire()
self.co_worker += 1 self.co_worker += 1
func(*args, **kwargs) func(*args, **kwargs)
self.co_worker -= 1 self.co_worker -= 1
self.semaphore.release() self.semaphore.release()
def do(self, func, *args, **kwargs): def do(self, func, *args, **kwargs):
self.semaphore.acquire()
b = Background(self._do, func, *args, **kwargs) b = Background(self._do, func, *args, **kwargs)
b.start() b.start()
@ -27,7 +27,7 @@ if __name__ == '__main__':
print('current workers=',worker.get_workers(), 'sleep=', t) print('current workers=',worker.get_workers(), 'sleep=', t)
time.sleep(t) time.sleep(t)
w = ThreadWorkers() w = ThreadWorkers(max_workers=30)
for i in range(100000): for i in range(100000):
w.do(k, w) w.do(k, w)