Python 运行时错误无法启动新线程
我试图检查一个端口上是否有可用的数据。如果该端口可用,则应向另一个端口发送消息“是”,如果没有数据,则发送消息“否”。 客户端正在连接到“是”或“否”出现的端口。我运行脚本,一切看起来都很好。但一个小时后我发现了一个错误: 运行时错误无法启动新线程。线程11中的异常: 回溯<最近一次调用last:bootstrap inner中的文件threading.py第914行 我是python新手,我真的不明白发生了什么。我的代码包含许多线程,因为我正在检查来自10个端口的数据,并向其他10个端口发送“是”或“否”消息。 以下是我的1端口代码的一部分:Python 运行时错误无法启动新线程,python,multithreading,python-3.x,tcp,python-multithreading,Python,Multithreading,Python 3.x,Tcp,Python Multithreading,我试图检查一个端口上是否有可用的数据。如果该端口可用,则应向另一个端口发送消息“是”,如果没有数据,则发送消息“否”。 客户端正在连接到“是”或“否”出现的端口。我运行脚本,一切看起来都很好。但一个小时后我发现了一个错误: 运行时错误无法启动新线程。线程11中的异常: 回溯
import time
import socket
import threading
from threading import Thread
import select
#-----------------------------------Server --------------------------
s = socket.socket(socket.AF_INET) #Socket
h = '127.0.0.1' #Host where data coming from
p = 14201 #Port
halarm = "127.0.0.1" # A port will be opened to send availabilty status
palarm = 14202 # Port
def Server ():
while True:
try:
time.sleep(0.1)
s.connect((h, p))
except socket.error:
pass
#-----------------------------------Server/Client -------------------------------
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((halarm, palarm)) # Bind to the Port where
sock.listen(1)
def func(conn): # Server-Client Function
while True:
try:
global s
Timeout = select.select([s], [], [], 5)# Timeout in seconds
connected = True
while True:
try:
if Timeout[0]:
conn.send(bytes("yes", "utf-8"))
time.sleep(3)
else:
conn.send(bytes("no", "utf-8"))
time.sleep(3)
newConnection= False
while not newConnection:
try:
s = socket.socket(socket.AF_INET)
s.connect((h, p))
Timeout = select.select([s], [], [], 5)# Timeout in seconds
newConnection= True
except socket.error:
conn.send(bytes("Port is closed", "utf-8"))
time.sleep(3)
pass
except socket.error:
pass
except:
pass
def connThread():
while True:
conn, addr = sock.accept()
time.sleep(0.1)
Thread(target = func, args=(conn,)).start()
if __name__ == '__main__':
Thread(target = Server).start()
Thread(target = connThread).start()
我怎样才能解决这个问题?非常感谢您的帮助。您可能正在耗尽系统资源。您不断创建线程,但它们从未结束。尝试从taskmgr监视您的程序。另外,应该切换
connThread
和Server
名称。我一直在关注它。我的程序的CPU利用率总共是30%和60%。有什么解决方案吗?我只是尝试与正在连接到发送“是”和“否”的端口的客户端保持连接。如果我没有使用线程,那么就不可能每10秒进行一次活动检查。因为否则会出现套接字超时,所以线程不会占用CPU。尝试监视内存和线程。此外,一旦连接了套接字,就无法再次连接<代码>例外:pass是一种不好的模式(特别是如果你不知道自己的路)。尝试打印smth,您可能会获得大量输出。