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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jq父级绑定事件的意义_jq——事件
- 下一篇: python中执行linux命令(调用l