【问题标题】:How to add multithreading here?如何在这里添加多线程?
【发布时间】:2019-12-10 01:38:19
【问题描述】:

我正在尝试在我的程序中处理多个客户端请求,所以我可以从我的代码中在哪里设置多线程代码。

根据我在下面发布的代码,如何初始化线程。

class A(object):
    result = []
    def __init__(self):
        config = configparser.ConfigParser()l
        config.read(r'setup.ini')
        config.sections()
        f = config['NETWORK']
        self.port = int(f['PORT'])  # port
        self.host = str(f['HOST'])  # host
        self.buff_size = int(f['BUFF_SIZE'])
        self.client_string = ''
        self.s = socket.socket()

    def listenn(self):
        self.s.bind(('localhost', self.port))
        print("\nlistening...")
        self.s.listen(5)

    def handle_request(self):
        conn, address = self.s.accept()
        print("\n======after accepting request=====\n")
        conn.send(b'connected\n', self.buff_size)
        print(f"got connection from{address}") 
        self.client_string = conn.recv(self.buff_size)

class B(A):
    super().__init__()

main():
a= A()
a.listenn()
a.handle_request()
b=B()
.
.

它应该处理多个请求并执行创建的第一个请求的功能,并且服务器应该是活动的。


from socket import *
from threading import Thread

clients = []

def clientHandler(c, addr):
    global clients
    print(addr, "is Connected")
    try:
        while True:
            data = c.recv(1024)
            if not data:
                break
            for client in clients:
                if addr != client:
                    c.sendto(data, client)
    except:
        print("Error. Data not sent to all clients.")

HOST = '' #localhost
PORT = 8000

s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)

print("Server is running on "+ str(PORT))

#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()
trds = []

for i in range(5):
    c, addr = s.accept()
    clients.append(addr)
    t = Thread(target=clientHandler, args = (c, addr))
    trds.append(t)
    t.start()

for t in trds:
    t.join()

s.close()

我想用下面的代码添加它。

【问题讨论】:

  • 那么你遇到了什么问题?
  • 我需要使用 threadin/ 处理请求
  • 你的代码有什么问题?你有什么错误

标签: python python-3.x sockets python-multithreading


【解决方案1】:

将下例中的线程代码合并到类代码中并不难 - 只需将方法 handle_request() 替换为

    def handle_request(self):
      while 1:
        conn, address = self.s.accept()
        print("\n======after accepting request=====\n")
        conn.send(b'connected\n', self.buff_size)
        print("got connection from%s"%{address}) 
        Thread(target=self.clientHandler, args=(conn, )).start()

    def clientHandler(self, conn):
        client_string = conn.recv(self.buff_size)
        print(client_string)    # or do what's supposed to do
        conn.close()

这实际上将accept()clientHandler() 线程的start() 放在一个循环中,而不是在主线程中处理客户端。

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2011-02-23
    • 2016-03-08
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多