Eksperymentuję z serwerem python tcp (niedawno odkryłem niesamowitą atrakcję, która jest pytonem). W każdym razie, serwer działa dobrze i drukuje dane tak jak się spodziewałem, ale kiedy patrzę na użycie procesora w menedżerze zadań Windows pokazuje, że python.exe zużywa 97% -99% procesora.Program serwera w języku Python ma wysokie użycie procesora.
Aby sprawdzić, co się stanie, uruchomiłem go ponownie na innym komputerze i korzystałem tylko z około 50% procesora.
Oto co zastanawiam się:
Dlaczego użycie procesora jest tak wysoki?
Dlaczego widziałbym różnicę działającą na dwóch różnych komputerach (jedna to Windows 7, druga to serwer 2008, czy to ma znaczenie)?
Tworzę nowy wątek dla każdego połączenia i uruchamiam pętlę while, która jest zawsze prawdziwa, ale mam "przerwę", gdy nie ma już połączenia. Czy ten wątek zostanie zniszczony poprawnie?
Z góry dziękuję za pomoc!
import socket
import threading
import logging
import time
TCP_IP = "127.0.0.1"
TCP_PORT = 10000
BUFFER_SIZE = 1024
SOCKET_TIMEOUT = 2
def handler(conn):
while 1:
try:
data = conn.recv(BUFFER_SIZE)
if data:
dataS = data.decode(encoding = 'UTF-8')
print ("received data: ")
print (dataS)
logging.getLogger("TestLogger").critical(dataS)
except socket.error as e:
print("connection closed")
conn.close()
break
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.setblocking(0)
s.listen(5)
except Exception as e:
print(e)
while 1:
try:
conn, addr = s.accept()
except Exception as e:
continue
print ('Connection address:')
print (addr)
conn.settimeout(SOCKET_TIMEOUT)
connThread = threading.Thread(target = handler, args = (conn,))
connThread.start()
Powinieneś opublikować to na recenzji kodu, ponieważ wydaje się, że jest to kod funkcjonalny. –
Nie byłem świadomy przeglądu kodu. Czy powinienem zatem usunąć ten post? – jteezy14
Nie jestem w 100% pewny, mogę chcieć zapytać o metatag –