Я пытаюсь выполнить задачу бесконечно l oop, но я хотел бы зарезервировать возможность изменения некоторых параметров по пути, поэтому я подумал об использовании сокетов для передачи этих данных в мой код. К сожалению, чтение из файла может быть слишком медленным.
Проблема в том, что в большинстве случаев нет входящих соединений, и я не хочу блокировать код. Лучшее, что я могу придумать, это setblocking (False) и try block, но мне интересно, может ли кто-нибудь сделать это более pythoni c способом.
Извините, если это супер тривиально. Я новичок в сети.
Краткий пример того, что мне хотелось бы:
import socket
from time import sleep
HOST = '127.0.0.1'
PORT = 62800
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setblocking(False)
server.bind((HOST, PORT))
server.listen()
a_parameter = 0.1
counter = 0
def task(a):
sleep(a)
global counter
counter+=1
print(counter)
while True:
try:
conn, addr = server.accept() # will throw an error if no connections are in the queue
with conn:
print('Connected by', addr)
data = conn.recv(1024)
a_parameter = float(data.decode("utf-8"))
print("New parameter:", a_parameter)
except:
pass
task(a_parameter)
Вы можете попробовать это с этим клиентом:
import socket
import sys
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 62800 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(bytes(sys.argv[1], 'utf-8'))