Python写一个线程池
时间: 2024-10-23 09:03:23 浏览: 27
在Python中,可以使用`concurrent.futures`模块来创建线程池。这个模块提供了一个高级接口,可以方便地管理并行计算任务。下面是一个简单的例子,展示了如何创建一个线程池:
```python
import concurrent.futures
# 定义要并行执行的函数
def worker_function(task):
# 这里替换成你的实际任务代码
print(f"Worker {task} is running")
# 创建一个线程池,最大并发数设为5
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# 把任务提交给线程池
tasks = [1, 2, 3, 4, 5]
for task in tasks:
future = executor.submit(worker_function, task)
# future是一个Future对象,你可以获取结果,或者检查是否完成
print(f"Submitted task {task}, future: {future}")
# 等待所有任务完成后,再关闭线程池
executor.shutdown(wait=True)
相关问题
python写一个线程池
在Python中,可以使用内置的`concurrent.futures`模块创建线程池。线程池是一个预先创建好固定数量线程的容器,可以并发执行任务,提高了程序的执行效率。以下是一个简单的例子,展示如何创建和使用线程池:
```python
import concurrent.futures
# 创建一个线程池,最大并发数为5
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# 提交任务到线程池
futures = [executor.submit(task, arg1, arg2) for task, arg1, arg2 in tasks_list]
# 等待所有任务完成
concurrent.futures.wait(futures)
# 打印每个任务的结果
for future in futures:
result = future.result()
print(f"Task completed with result: {result}")
```
在这个例子中:
- `ThreadPoolExecutor`是用来创建线程池的对象。
- `max_workers`决定了线程池的最大并发数。
- `submit`方法用于提交任务给线程池,它接收一个函数和参数列表作为输入,并返回一个Future对象,表示该任务。
- `wait`方法让主线程等待直到所有的Future完成。
- `future.result()`获取并打印任务执行后的结果。
用 python写一个线程池
以下是一个简单的线程池实现:
```python
import threading
from queue import Queue
class ThreadPool:
def __init__(self, num_threads):
self.num_threads = num_threads
self.task_queue = Queue()
self.threads = []
def start(self):
for i in range(self.num_threads):
thread = threading.Thread(target=self._worker)
thread.start()
self.threads.append(thread)
def submit(self, func, *args, **kwargs):
self.task_queue.put((func, args, kwargs))
def _worker(self):
while True:
task = self.task_queue.get()
if task is None:
break
func, args, kwargs = task
try:
func(*args, **kwargs)
except Exception as e:
print(e)
def join(self):
for i in range(self.num_threads):
self.task_queue.put(None)
for thread in self.threads:
thread.join()
```
使用示例:
```python
def task(name):
print('Task {} started'.format(name))
time.sleep(1)
print('Task {} finished'.format(name))
pool = ThreadPool(2)
pool.start()
pool.submit(task, 'A')
pool.submit(task, 'B')
pool.submit(task, 'C')
pool.join()
```
输出:
```
Task A started
Task B started
Task A finished
Task C started
Task B finished
Task C finished
```
阅读全文