我在使用线程池ThreadPoolExecutor时,运行程序报错cannot schedule new futures after shutdown
时间: 2024-02-20 12:02:22 浏览: 171
线程池ThreadPoolExecutor使用简介与方法实例
5星 · 资源好评率100%
这个错误通常是由于线程池在关闭后,尝试提交新的任务导致的。在使用 `ThreadPoolExecutor` 时,需要显式地关闭线程池,否则会出现这个错误。
解决办法是在使用完线程池后,调用 `shutdown()` 方法显式关闭线程池,避免在线程池已经关闭时尝试提交新的任务。
例如,在以下代码中,如果没有显式关闭线程池,就会报错 `cannot schedule new futures after shutdown`:
```python
import concurrent.futures
def my_function():
print('Function started')
time.sleep(1)
print('Function finished')
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
future1 = executor.submit(my_function)
future2 = executor.submit(my_function)
# 会报错:cannot schedule new futures after shutdown
future3 = executor.submit(my_function)
```
为了避免这个错误,可以使用以下代码:
```python
import concurrent.futures
def my_function():
print('Function started')
time.sleep(1)
print('Function finished')
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
future1 = executor.submit(my_function)
future2 = executor.submit(my_function)
executor.shutdown()
# 不会报错
future3 = executor.submit(my_function)
```
在这个例子中,我们首先使用 `with` 语句创建一个线程池,并使用 `executor.submit()` 方法提交两个任务。然后在使用完线程池后,调用 `executor.shutdown()` 方法显式关闭线程池。这样即可避免报错 `cannot schedule new futures after shutdown`。
阅读全文