Python中级精华-创建线程池

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中级精华-创建线程池相关的知识,希望对你有一定的参考价值。

参考技术A 目的:

我们想去创建一个工作者线程池来处理客户端的连接,让每个线程去处理各自的客户,或者完成其他类型的工作。

方法:

在concurrent.futures库中包含了ThreadPoolExecutor类可以实现这个目的。下面的例子是一个简单TCP服务器,使用线程池来处理客户端:

同样,可以抛开concurrent.futures中的ThreadPoolExecutor,直接手动创建线程池,如果借助Queue则会变得容易:

当然又有一句很蹩脚的话,不建议各位这样使用!!应该去使用concurrent.futures中的ThreadPoolExecutor,这么做的优势在于提交任务者可以很好地拿到处理后的结果:

讨论一个大家都很容易想到的问题,有些人认为,应该在服务器接收到一个客户端连接时就去开辟一个线程来处理这个客户端的事务,本质上来讲这样确实没有问题,但是,万一一个黑客用大量的客户端去访问服务时,有可能会因为开辟太多线程导致服务器挂掉,这是初学者都会想到的思路,但是,一旦涉及多并发程序,切记一定要限制线程个数,为了系统稳定和安全。下面为各位展示初学者的代码:

这里也要注意,线程只适合做IO密集型的任务。综上关于线程池的内容就介绍到这里

python创建一个线程和一个线程池

创建一个线程

1.示例代码

import time
import threading
def task(arg):
    time.sleep(2)
while True:
    num = input('>>>')
    t = threading.Thread(target=task.args=(num,))
    t.start()

创建一个线程池

1.示例代码

import time
from concurrent.futures import ThreadPoolExecutor


def task(m, n):
    time.sleep(2)
    print(m, n)


# 创建了一个线程池(最多5个线程)
pool = ThreadPoolExecutor(3)

for i in range(10):
    # 去线程池中申请一个线程,让线程执行task函数
    pool.submit(task, i, 8)

2.示例代码

import time
from concurrent.futures import ThreadPoolExecutor
def task(arg):
    time.sleep(50)
pool = ThreadPoolExecutor(10)
while 1:
    num = input('>>>')
    pool.submit(task,num)

以上是关于Python中级精华-创建线程池的主要内容,如果未能解决你的问题,请参考以下文章

Java的所有线程知识精华全在CompletableFuture了

Java的所有线程知识精华全在CompletableFuture了

并发编程精华问答| Java线程池使用时注意事项

并发编程精华问答| Java线程池使用时注意事项

python创建一个线程和一个线程池

python 线程池使用