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)
| 归档时间: |
|
| 查看次数: |
5303 次 |
| 最近记录: |