gpt4 book ai didi

python - python线程中的无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:29 24 4
gpt4 key购买 nike

即使服务器不接受我在客户端编写的以下函数的连接,我也试图从客户端到服务器端不断地通过时间

def run(self):

print "running client"
start = datetime.now().second
while True:
try:
host ='localhost'
port = 5010
time = abs(datetime.now().second-start)
time = str(time)
print time
client = socket.socket()
client.connect((host,port))
client.send(time)

except socket.error:
pass

现在我在另一个类中,它的名字是 loginGui,我想在线程的帮助下执行上面的全局函数运行,以便客户端在我的其余客户端代码执行时不断地将时间抛给服务器端。所以我在一个类中写了下面的代码登录界面

class loginGui:
def run_client(self):
thread.start_new_thread(run,())

当我调用上面的函数 run_client() 时,线程运行但由于某些原因它退出循环并停止抛出时间所以我尝试了另一种方法..

class FuncThread(threading.Thread):

def __init__(self, target, *args):
self._target = target
self._args = args
threading.Thread.__init__(self)

def run(self):
self._target(*self._args)

我写了上面的类,然后在 run_client() 函数中做了以下更改..

def run_client(self):

t1 = FuncThread(run,())
t1.start()
t1.join()

现在,当我调用 run_client() 时,它会创建一个线程并调用全局函数 run(),但现在的问题是它在 while 循环中被触发并继续抛出时间。

结论:我基本上想要的是创建一个调用我的函数运行的线程并继续投入时间而不会陷入 while 循环..

最佳答案

在您的第一个示例中,您的 while 循环以极快的未检查速率触发,一遍又一遍地创建未关闭的连接。你需要尝试在那里设置某种类型的限制,无论是 sleep 还是类似的东西。尝试重用同一个客户端而不是丢弃它们。您可能会遇到其他类型的异常,例如最终耗尽资源。如果您上次创建失败,您只需尝试创建一个新客户端。不是每次你想发送另一位数据时。

在你的第二个例子中,你做的事情和以前几乎一样,除了将代码移动到实际的线程类中,但是你调用了 join() 它将阻塞主线程,直到您的线程完成。

简而言之,我认为问题不在于您在何处构造此线程类,而在于您如何以浪费的方式使用套接字连接。

这个例子有点难看,但我认为它会给你一个起点:

import time

def run(self):

print "running client"
start = datetime.now().second
host ='localhost'
port = 5010

client = None

while True:

if client is None:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
client.connect((host,port))
except socket.error:
print "Connection failed. Retrying."
client = None
time.sleep(.25)
continue


time = str(abs(datetime.now().second-start))
print time
try:
client.sendall(time)
except:
print "Send error."
client.close()
client = None

time.sleep(.25)

关于python - python线程中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10252491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com