线程缺少 1 个必需的位置参数

Tes*_*rea 5 python python-multithreading

只是为了提供一些背景信息:我目前正在学习 Python,为此我启动了一个小项目。

我编写了两个 Python 脚本:主机脚本和客户端脚本。

我已经处于多个客户端可以连接到一个“主机”并且主机可以向所有客户端发送随机字符串的阶段。

现在我想解决这个问题,如果客户端与主机断开连接,直到再次调用 CLIENTSOCKET 之前没有人知道。

因此,我暂时编写了 checkConnection 方法,每 5 秒 ping 一次所有客户端。

class Connection():

    def __init__(self):
        self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    def bound(self,RHOST,PORT):
        self.s.bind((RHOST,PORT))
        self.s.listen(1000)

    def connect(self):
        ((CLIENTSOCKET,ADRESS)) = self.s.accept()
        return (CLIENTSOCKET,ADRESS)

def newConnection(Connection,CLIENTS):
    con = Connection
    cli = CLIENTS
    while True:
        c = con.connect()
        if c != None:
            if len(cli) != 0:
                for x in range (len(cli)):

                    if c[1][0] == cli[x][1][0]:
                        pass
                    else:
                        cli.append(c)
            else:
                cli.append(c)

def checkConnection(CLIENTS):
    cli = CLIENTS
    while True:
        if(len(cli)!=0):
            for x in range(len(cli)):
                try:
                    cli[x][0].sendall(b'')
                except:
                    del cli[x]
            time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

我正在以每个方法作为目标创建线程,并为它们提供所需的参数。第一个线程按其应有的方式启动,但第二个线程却没有。

我实在不知道为什么?

t = threading.Thread(target = newConnection,name = "newConnection",args = (g,CLIENTS))
t2 = threading.Thread(target = checkConnection,name = "checkConnection",args = (CLIENTS))
t.start()
t2.start()
Run Code Online (Sandbox Code Playgroud)

线程 checkConnection 中出现异常:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 914, in _bootstrap_inner
    self.run()
  File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
TypeError: checkConnection() missing 1 required positional argument: 'CLIENTS'
Run Code Online (Sandbox Code Playgroud)