Python 创建一个指定数量线程的线程池,当线程被使用完后立即销毁,同时每销毁一个线程就会重新在线程池里补充创建一个线程
时间: 2023-07-01 11:06:37 浏览: 250
Python实现的线程池
可以使用 Python 的 `concurrent.futures` 模块来创建一个指定数量线程的线程池,并且可以使用 `ThreadPoolExecutor` 类来管理线程池。下面是一个例子:
```python
import concurrent.futures
import time
THREAD_POOL_SIZE = 5
def do_work():
print(f"Thread {threading.current_thread().name} is working...")
time.sleep(1)
with concurrent.futures.ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) as executor:
for i in range(10):
executor.submit(do_work)
```
在上面的例子中,我们创建了一个最大线程数为 5 的线程池,并且使用 `executor.submit()` 方法提交了 10 个任务到线程池中。
当线程被使用完后,线程池会自动回收线程资源。如果线程池中的线程数量少于最大线程数,则会自动创建新的线程来执行任务。如果线程池中的线程数量多于最大线程数,则多余的线程会在任务执行完毕后被销毁。
如果你想要在销毁一个线程后立即创建一个新的线程,可以使用 `executor.shutdown(wait=True)` 方法等待所有任务执行完毕后再关闭线程池,然后重新创建一个新的线程池。如下所示:
```python
import concurrent.futures
import time
THREAD_POOL_SIZE = 5
def do_work():
print(f"Thread {threading.current_thread().name} is working...")
time.sleep(1)
while True:
with concurrent.futures.ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) as executor:
for i in range(10):
executor.submit(do_work)
time.sleep(5)
```
在上面的例子中,我们使用一个无限循环来不断创建新的线程池,并且在任务执行完毕后关闭线程池。然后等待 5 秒后再创建一个新的线程池,以此来实现动态增减线程数量的功能。
阅读全文