python tcp server分包_如何创建线程池来监听tcpserver包python
我试图创建线程池来同时对传入的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相关推荐
- 手动创建线程池 效果会更好_创建更好的,可访问的焦点效果
手动创建线程池 效果会更好 Most browsers has their own default, outline style for the :focus psuedo-class. 大多数浏览器 ...
- mysql5.6 线程池_[MySQL5.6] Percona Server 5.6.14的线程池浅析
Percona的线程池基本上是从Mariadb中引入,其实现思路也比较简单,就是在线程调度器那增加了一组新的回调函数.线程池可以有效改善在大并发下的性能: Thread pool的原理在Percona ...
- executor线程池框架_如何使用Java 5 Executor框架创建线程池
executor线程池框架 Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸 ...
- threadpoolexecutor创建线程池_线程池ThreadPoolExecutor源码分析
什么是线程池 创建线程要花费昂贵的资源和时间,如果任务来了才创建那么响应时间会变长,而且一个进程能创建的线程数量有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应出来,它们被称为线程池,里面 ...
- java 阿里线程池_为什么阿里不允许使用 Executors 创建线程池?
你知道为什么阿里不允许Executors去创建线程池吗? 阿里巴巴开发手册关于线程池有这样一条规定: 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方 ...
- 为什么阿里巴巴要禁用 Executors 创建线程池?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 转自:掘金,作者:何甜甜在吗 juejin.im/post/5dc ...
- 为什么阿里巴巴要禁用Executors创建线程池?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:何甜甜在吗 juejin.im/post/5dc41c165 ...
- 为什么阿里不允许用Executors创建线程池
1 文章概述 <阿里巴巴JAVA开发手册>有这样一条强制规定:线程池不允许使用Executors去创建,而应该通过ThreadPoolExecutor方式,这样处理方式更加明确线程池运行规 ...
- 阿里内部禁用Executors创建线程池,为什么?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 何甜甜在吗 来源 | http://rrd.m ...
最新文章
- 【数据结构作业心得】纸面6 - Matlab LU分解
- CBV 验证装饰器的使用
- 田志刚:写文章的两个好处
- 绝对精华,大牛教你在Android系统上安装linux发行版
- 限界分支法(实际上没有剪枝,介绍的是广度优先搜索):01背包问题,队列实现方式(FIFO)
- android 两足机器人,基于Android的双足机器人语音控制系统研究
- [剑指offer][JAVA]面试题第[15]题[二进制中1的个数][位运算]
- powerDesigner需求建模
- linux mysql启动错误
- MiniGUI编程--列表框
- RouterOS计划任务实例
- 定制一款铝合金型材的流程
- md5加密离线工具windwos,ubuntu
- Chango的数学Shader世界(十八)RayTrace三维分形(三)—— 完善,距离场软阴影
- 周期信号波形识别及参数测量装置(J 题) 【高职高专组】--2021 年全国大学生电子设计竞赛
- C4D材质原理揭秘笔记-初学必看
- Unity经典案例再现《太空大战》
- java isreachable_Java网络编程从入门到精通(12):使用isReachable方法探测主机是否可以连通...
- wia twain for java,c – 使用WIA或TWAIN扫描页面
- 对java后端的一些学习建议