Ho una funzione che ha la stessa interfaccia del built-in input
di Python, ma funziona in un ambiente client-server. Quando viene chiamato, la funzione, che viene eseguita nel server, invia un messaggio al client, chiedendogli di ottenere un input dall'utente. L'utente inserisce alcune cose o chiude il prompt e il risultato viene passato al server, che lo passa alla funzione. La funzione restituisce quindi il risultato.
La funzione deve funzionare come input
di Python [che è la specifica], quindi deve bloccare fino a quando non ha il risultato.
Funziona tutto, ma utilizza un ciclo occupato, che, in pratica, potrebbe facilmente girare per molti minuti. Attualmente, la funzione dice al client di ottenere l'input, passando un id. Il cliente restituisce il risultato con l'id. Il server mette il risultato in un dizionario, con l'id come chiave. In pratica, la funzione attende che la chiave esista.
def input():
'''simplified example'''
key = unique_key()
tell_client_to_get_input(key)
while key not in dictionary: pass
return dictionary.pop(pin)
L'utilizzo di una callback sarebbe la strada normale, ma la funzione input
deve essere bloccata fino a quando il risultato non è disponibile, quindi non vedo come potrebbe funzionare. La specifica non può cambiare, poichè Python utilizzerà la nuova funzione input
per elementi come help
e pdb
, che forniscono i propri REPL piccoli.
Ho molta flessibilità in termini di funzionamento generale di tutto, ma non riesco a gestire la funzione che agisce esattamente come quella di Python.
C'è un modo per restituire il risultato non appena è disponibile, senza il ciclo occupato?