Я пытаюсь проверить, доступны ли данные для одного порта.Если это доступно, то сообщение «да» должно быть отправлено на другой порт и «нет», если нет данных.Клиент подключается к тому порту, на который приходит «да» или «нет».Я запускаю сценарий, и все выглядит хорошо.Но через час я получил ошибку: Ошибка выполнения не может запустить новый поток.Исключение в потоке 11: Traceback <последний вызов был последним: файл threading.py, строка 914 в загрузочном strap-inner.</p>
Я новичок в Python, и я действительно не понимаю, что происходит.Мой код содержит много потоков, так как я проверяю данные с 10 портов и отправляю сообщения «да» или «нет» на другие 10 портов.Вот часть моего кода для 1 порта:
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()
Как я могу решить эту проблему?Я ценю вашу помощь.