我想要一些像Java一样的Executors.newFixedThreadPool(3)
。
也就是说,我希望我的python程序一次最多分叉3个多线程,如果多线程的数量现在是3,等到数字小于3
python中有类似的东西吗?非常感谢!
答案 0 :(得分:3)
我认为您需要的是semaphore object:
threadLimiter = threading.BoundedSemaphore(maximumNumberOfThreads)
class YourThread(threading.Thread):
def run(self):
threadLimiter.acquire()
try:
<your code here>
finally:
threadLimiter.release()
当您启动线程超过最大线程数时,超出的线程将在threadLimiter.acquire()
中等待,直到某些线程结束。
答案 1 :(得分:1)
如果您正在运行python 3.2+,则可以访问concurrent.futures
,这是一个高级别的线程模块,可以方便地将其接口称为Executor
。它有ThreadPoolExecutor
和ProcessPoolExecutor
两种口味。
#adapted example from docs
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
future_results = [executor.submit(my_func, *args) for _ in range(100000)]
for result in concurrent.futures.as_completed(future_results):
#do something with each result
检索许多urllib.request
次调用的结果的更多充实示例可以是found in the docs。应该注意的是,这就是你应该使用多个线程 - I / O绑定的任务。由于GIL,处理器绑定的任务不会受益于多线程 - 为此,使用ProcessPoolExecutor
(利用multiprocessing
)。