我试图创建线程池来同时对传入的tcp包执行一些操作。在

我在python3中找不到任何内置线程池。我也读了一些关于multiprocessing.Pool的文章,但是它不支持内存共享。所以我使用Queue来模拟线程池。在

为每个线程创建一个队列是否更好?

有没有人有建议或更好的解决方案来改进以下自定义线程池代码?在import socketserver

import threading

from queue import Queue

class ThreadPool:

tcp_queue = Queue()

# redis = redis connection

def __init__(self, thread_worker_numbers=10):

for i in range(thread_worker_numbers):

threading.Thread(target=self.worker).start()

def worker(self):

while True:

packet = self.tcp_queue.get()

print('thread: %s received packet: %s' % (threading.current_thread().getName(), packet))

# TODO do process on packet

def queue(self, packet):

self.tcp_queue.put(packet)

def queue_count(self):

return self.tcp_queue.qsize()

class TCPServerHandler(socketserver.BaseRequestHandler):

thread_pool = ThreadPool()

def handle(self):

# self.request is the TCP socket connected to the client

self.data = self.request.recv(1024).strip()

packet = self.data.decode("utf-8")

print(packet)

self.thread_pool.queue(packet)

# print("%s wrote: %s" % (self.client_address[0], packet))

# just send back the same data, but upper-cased

self.request.sendall(bytes('{ok: 1, msg:""}', 'utf-8'))

if __name__ == "__main__":

HOST, PORT = "0.0.0.0", 9999

# Create the server, binding to localhost on port 9999

server = socketserver.TCPServer((HOST, PORT), TCPServerHandler)

# Activate the server; this will keep running until you

# interrupt the program with Ctrl-C

server.serve_forever()

python tcp server分包_如何创建线程池来监听tcpserver包python相关推荐

  1. 手动创建线程池 效果会更好_创建更好的,可访问的焦点效果

    手动创建线程池 效果会更好 Most browsers has their own default, outline style for the :focus psuedo-class. 大多数浏览器 ...

  2. mysql5.6 线程池_[MySQL5.6] Percona Server 5.6.14的线程池浅析

    Percona的线程池基本上是从Mariadb中引入,其实现思路也比较简单,就是在线程调度器那增加了一组新的回调函数.线程池可以有效改善在大并发下的性能: Thread pool的原理在Percona ...

  3. executor线程池框架_如何使用Java 5 Executor框架创建线程池

    executor线程池框架 Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸 ...

  4. threadpoolexecutor创建线程池_线程池ThreadPoolExecutor源码分析

    什么是线程池 创建线程要花费昂贵的资源和时间,如果任务来了才创建那么响应时间会变长,而且一个进程能创建的线程数量有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应出来,它们被称为线程池,里面 ...

  5. java 阿里线程池_为什么阿里不允许使用 Executors 创建线程池?

    你知道为什么阿里不允许Executors去创建线程池吗? 阿里巴巴开发手册关于线程池有这样一条规定: 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方 ...

  6. 为什么阿里巴巴要禁用 Executors 创建线程池?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:掘金,作者:何甜甜在吗 juejin.im/post/5dc ...

  7. 为什么阿里巴巴要禁用Executors创建线程池?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:何甜甜在吗 juejin.im/post/5dc41c165 ...

  8. 为什么阿里不允许用Executors创建线程池

    1 文章概述 <阿里巴巴JAVA开发手册>有这样一条强制规定:线程池不允许使用Executors去创建,而应该通过ThreadPoolExecutor方式,这样处理方式更加明确线程池运行规 ...

  9. 阿里内部禁用Executors创建线程池,为什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 何甜甜在吗 来源 | http://rrd.m ...

最新文章

  1. 【数据结构作业心得】纸面6 - Matlab LU分解
  2. CBV 验证装饰器的使用
  3. 田志刚:写文章的两个好处
  4. 绝对精华,大牛教你在Android系统上安装linux发行版
  5. 限界分支法(实际上没有剪枝,介绍的是广度优先搜索):01背包问题,队列实现方式(FIFO)
  6. android 两足机器人,基于Android的双足机器人语音控制系统研究
  7. [剑指offer][JAVA]面试题第[15]题[二进制中1的个数][位运算]
  8. powerDesigner需求建模
  9. linux mysql启动错误
  10. MiniGUI编程--列表框
  11. RouterOS计划任务实例
  12. 定制一款铝合金型材的流程
  13. md5加密离线工具windwos,ubuntu
  14. Chango的数学Shader世界(十八)RayTrace三维分形(三)—— 完善,距离场软阴影
  15. 周期信号波形识别及参数测量装置(J 题) 【高职高专组】--2021 年全国大学生电子设计竞赛
  16. C4D材质原理揭秘笔记-初学必看
  17. Unity经典案例再现《太空大战》
  18. java isreachable_Java网络编程从入门到精通(12):使用isReachable方法探测主机是否可以连通...
  19. wia twain for java,c – 使用WIA或TWAIN扫描页面
  20. 对java后端的一些学习建议

热门文章

  1. iOS 图片处理-利用GPUImage 磨皮和美白图片
  2. 十进制字符串转十六进制字符串
  3. Error: Cannot find module ‘express‘
  4. JS异步编程之callback
  5. Python-100 练习题 01 列表推导式
  6. python-docx操作
  7. leangoo V5.4.2版上线
  8. Linux下task_struct详解
  9. UnitOfWork以及其在ABP中的应用
  10. POJ 1207 The 3n + 1 problem