threading进程池
时间: 2023-08-24 19:06:08 浏览: 33
在Python中,可以使用`threading`模块来实现线程池,但是线程池并不一定能够提高程序的性能。相反,过多的线程会导致线程切换的开销,从而降低程序的性能。
下面是一个简单的使用`threading`模块实现线程池的示例:
```python
import threading
from queue import Queue
class ThreadPool:
def __init__(self, num_threads):
self.queue = Queue()
self.threads = []
for i in range(num_threads):
thread = threading.Thread(target=self._worker)
thread.daemon = True
thread.start()
self.threads.append(thread)
def _worker(self):
while True:
func, args, kwargs = self.queue.get()
try:
func(*args, **kwargs)
except Exception as e:
print(e)
self.queue.task_done()
def submit(self, func, *args, **kwargs):
self.queue.put((func, args, kwargs))
def join(self):
self.queue.join()
```
使用时,首先需要创建一个线程池,然后调用`submit`方法来提交任务。最后,调用`join`方法等待所有任务执行完成。
```python
def worker(num):
print("Worker %d started" % num)
time.sleep(1)
print("Worker %d finished" % num)
pool = ThreadPool(4)
for i in range(10):
pool.submit(worker, i)
pool.join()
```
上面的代码创建了一个包含4个线程的线程池,然后提交了10个任务,每个任务执行1秒钟。输出结果如下:
```
Worker 0 started
Worker 1 started
Worker 2 started
Worker 3 started
Worker 0 finished
Worker 4 started
Worker 1 finished
Worker 5 started
Worker 2 finished
Worker 6 started
Worker 3 finished
Worker 7 started
Worker 4 finished
Worker 8 started
Worker 5 finished
Worker 9 started
Worker 6 finished
Worker 7 finished
Worker 8 finished
Worker 9 finished
```