用python做一个线程池,只允许一个线程运行完
时间: 2024-10-25 19:18:28 浏览: 20
在Python中,你可以使用内置的`concurrent.futures`模块创建一个线程池,并通过`ThreadPoolExecutor`类设置一个限制,使得任何时候只有一个任务在执行。这通常用于控制并发量,防止过多的线程同时占用资源。
以下是一个简单的例子:
```python
import concurrent.futures
class LimitedThreadPool:
def __init__(self, max_workers=1):
self.executor = concurrent.futures.ThreadPoolExecutor(max_workers=max_workers)
self.running_task = None
def submit(self, func, *args, **kwargs):
if self.running_task is not None:
print(f"当前已有任务在运行,等待 {self.running_task} 完成...")
return self.running_task
else:
future = self.executor.submit(func, *args, **kwargs)
self.running_task = future
return future
def wait_for_completion(self, task):
# 当你需要阻塞并等待特定任务完成时,可以在这里加入
while not task.done():
pass
self.running_task = None
# 使用示例
pool = LimitedThreadPool(1)
def worker_function(i):
print(f"Task {i} started")
time.sleep(2) # 模拟耗时操作
print(f"Task {i} finished")
task1 = pool.submit(worker_function, 1)
task2 = pool.submit(worker_function, 2)
# 输出结果会先显示第一个任务,然后第二个任务
```
在这个例子中,每次`submit`一个新的任务,都会检查是否有其他任务正在执行。如果有,新任务会被推迟,直到当前任务完成。当你想要某个任务完成后继续,可以调用`wait_for_completion`方法。
阅读全文