Mi piacerebbe eseguire un'espressione in racket speculativamente, sperando di (ma non mi aspetto particolarmente) un risultato. Il mio codice ha un limite di tempo difficile. Esiste un modo semplice per eseguire un po 'di codice della racchetta per alcuni secondi, quindi ucciderlo in modo affidabile ed eseguire il codice di fallback prima che la scadenza scada?Thread di esecuzione della racchetta per un intervallo di tempo fisso
risposta
Sì, un modo semplice per farlo è utilizzare la libreria engine. Per esempio:
#lang racket
(require racket/engine)
(define e (engine
(λ (_)
;; just keep printing every second
(let loop()
(displayln "hi")
(sleep 1)
(loop)))))
;; run only for 2 seconds
(engine-run 2000 e)
Invece di specificare un tempo, è anche possibile specificare un oggetto event modo che il filo si arresta quando l'evento attiva.
È possibile creare un thread "worker" per eseguire il lavoro e un altro thread "watcher" per uccidere il worker.
Questo è descritto nella sezione More: Systems Programming dei documenti.
Il, primo taglio più semplice può essere sufficiente per il calcolo:
(define (accept-and-handle listener)
(define-values (in out) (tcp-accept listener))
(define t (thread
(lambda()
(handle in out)
(close-input-port in)
(close-output-port out))))
; Watcher thread:
(thread (lambda()
(sleep 10)
(kill-thread t))))
Tuttavia, se hai a che fare con le altre risorse continuate a leggere per conoscere custodi.
Con questo metodo, qual è il modo migliore per restituire il risultato del primo thread fino al thread principale? (thread-send) sembra un po 'sgraziato, tutto ciò che voglio è qualcosa di simile (thread-wait t) che blocca su t e restituisce il risultato. C'è un modo semplice per farlo? – So8res
Buon punto. Potresti provare un ['canale'] (http://docs.racket-lang.org/reference/channel.html) - avere il lavoratore' channel-put' un risultato normale, avere l'osservatore 'channel-put' un risultato timeout, e fare in modo che il thread principale 'channel-get' attenda quello che viene prima. –
- 1. Grafico di aggiornamento/grafico con intervallo di tempo fisso
- 2. Ottenere il tempo di esecuzione di un thread java
- 3. Pianificazione del processo java per un intervallo di tempo specifico con un determinato intervallo di tempo
- 4. Panda: rolling medio per intervallo di tempo
- 5. Durata intervallo di tempo
- 6. Raggruppamento dati per intervallo di tempo
- 7. Interrompere l'esecuzione della funzione dopo un tempo fisso in javascript
- 8. Tweet Twitter API per intervallo di tempo
- 9. Formato personalizzato per intervallo di tempo relativo
- 10. Tempo di esecuzione della CPU in Java
- 11. Perché ScheduledThreadPoolExecutor accetta solo un numero fisso di thread?
- 12. Highstock - intervallo di tempo irregolare
- 13. Intervallo doppio intervallo tempo standard
- 14. Ottieni ogni ora per un intervallo di tempo
- 15. Come eseguire un metodo dopo un intervallo di tempo specifico?
- 16. Conversione di un float in un intervallo di tempo
- 17. Tempo quantico per processo per thread
- 18. tempo di esecuzione mysql
- 19. Tempo medio di esecuzione
- 20. Tempo di esecuzione massimo per JavaScript
- 21. tempo di esecuzione nell'ambiente di multithreading
- 22. Come impostare un allarme per attivare correttamente a tempo fisso?
- 23. Esecuzione multipla della stessa subroutine di thread per commentare pthread_join per quel thread
- 24. Invia messaggi di Instagram per hashtag e intervallo di tempo
- 25. Processo di uccisione dopo un determinato intervallo di tempo?
- 26. Selezionare righe all'interno di un determinato intervallo di tempo
- 27. MongoDB - Interrogazione tra un intervallo di tempo di ore
- 28. Come aggiungere un intervallo di tempo a un NSDate?
- 29. Postgres Query tempo di esecuzione
- 30. Intervallo di tempo leggibile dall'uomo automatico
Non siamo carini con le risposte pubblicate simultaneamente? :) Scherzi a parte, non sapevo nemmeno di "racchetta/motore", è pulito. –