美文网首页
python 创建线程池

python 创建线程池

作者: 孙广宁 | 来源:发表于2022-06-07 22:39 被阅读0次
12.7 创建线程池来处理用户客户端链接
  • concurrent.futures库中包含一个ThreadPoolExecutor类可以实现这个目标。我们来创建一个简单的TCP服务器,使用线程池来服务客户端
from socket import AF_INET,SOCK_STREAM,socket
from concurrent.futures import ThreadPoolExecutor

def echo_client(sock,client_addr):
    print('got connection from',client_addr)
    while True:
        msg = sock.recv(65536)
        if not msg:
            break
        sock.sendall(msg)
    print('client closed')
    sock.close()

def echo_server(addr):
    pool = ThreadPoolExecutor(128)
    sock = socket(AF_INET,SOCK_STREAM)
    sock.bind(addr)
    sock.listen(5)
    while True:
        client_sock,client_addr=sock.accept()
        pool.submit(echo_client,client_sock,client_addr)

echo_server(('',5000))
  • 如果想手动创建自己的线程池,使用Queue来实现
from socket import AF_INET,SOCK_STREAM,socket
from concurrent.futures import ThreadPoolExecutor
from threading import Thread
from queue import Queue

def echo_client(q):
    sock,client_addr = q.get()
    print('got connection from',client_addr)
    while True:
        msg = sock.recv(65536)
        if not msg:
            break
        sock.sendall(msg)
    print('client closed')
    sock.close()

def echo_server(addr,nworkers):
    q = Queue()
    for n in range(nworkers):
        t = Thread(target=echo_client,args=(q,))
        t.daemon = True
        t.start()
    sock = socket(AF_INET,SOCK_STREAM)
    sock.bind(addr)
    sock.listen(5)
    while True:
        client_sock,client_addr=sock.accept()
        q.put(client_sock,client_addr)

echo_server(('',5000),120)
  • 我们大多数情况下会使用ThreadPoolExecutor而不是手动实现线程池。这么做的优势在于使得任务的提交者能够更容易从调用函数中取得结果。

相关文章

  • Python多线程

    目录:一、线程的创建二、多线程互斥锁三、线程间通信四、线程池 Python并发之多线程 一、线程的创建 单线程示例...

  • python 创建线程池

    12.7 创建线程池来处理用户客户端链接 concurrent.futures库中包含一个ThreadPoolEx...

  • java线程池

    线程VS线程池 普通线程使用 创建线程池 执行任务 执行完毕,释放线程对象 线程池 创建线程池 拿线程池线程去执行...

  • 使用池来实现并发服务器

    python自带池 进程池和线程池创建用的是同一个模块(multiprocessing),但方法不同,进程池的方法...

  • 线程池

    线程池 a. 基本组成部分: 1、线程池管理器(ThreadPool):用于创建并管理线程池,包括创建线程池,销毁...

  • ThreadPoolExecutor

    1 创建线程池 通过ThreadPoolExecutor创建线程池: corePoolSize:核心线程的数量。m...

  • J.U.C之线程池03:源码解析-线程池创建和属性

    创建线程属性 我们可以通过ThreadPoolExecutor构造函数来创建一个线程池: 线程池的创建

  • 线程池的基本知识

    线程池的四个组成部分: 1.线程池管理器:用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2.工作...

  • java中创建线程池的方式

    创建线程池的方式: 使用Java提供的用于管理线程池的接口ExecutorService 创建线程池,共有四种方式...

  • spring 线程池和java线程池

    jdk线程池就是使用jdk线程工具类ThreadPoolExecutor 创建线程池spring线程池就是使用自己...

网友评论

      本文标题:python 创建线程池

      本文链接:https://www.haomeiwen.com/subject/asrymrtx.html