Dites que j'ai une fonction python longue qui ressemble à ceci?Comment faire pour temporiser un programme en cours d'exécution en utilisant rxpython?
import random
import time
from rx import Observable
def intns(x):
y = random.randint(5,10)
print(y)
print('begin')
time.sleep(y)
print('end')
return x
Je veux être en mesure de définir un délai de 1000ms
.
Donc je suis dong quelque chose comme, en créant un observable et en le mappant à travers le calcul intense ci-dessus.
a = Observable.repeat(1).map(lambda x: intns(x))
Maintenant, pour chaque valeur émise, si elle prend plus de 1000ms je veux mettre fin à l'observable, dès que j'atteins 1000ms
en utilisant on_error
ou on_completed
a.timeout(1000).subscribe(lambda x: print(x), lambda x: print(x))
déclaration ci-dessus ne délai obtenir, et appelle on_error
, mais il finit de calculer le calcul intense et revient seulement ensuite aux instructions suivantes. Existe-t-il une meilleure façon de le faire?
La dernière instruction affiche les éléments suivants
8 # no of seconds to sleep
begin # begins sleeping, trying to emit the first value
Timeout # operation times out, and calls on_error
end # thread waits till the function ends
L'idée est que si une timesout de fonction particulière, je veux être en mesure de poursuivre mon programme, et d'ignorer le résultat. Je me demandais si la fonction intns
a été faite sur un thread séparé, je suppose que le thread principal continue d'exécution après le délai d'expiration, mais je veux toujours arrêter de calculer la fonction intns
sur un thread, ou le tuer en quelque sorte.
Un exemple montrant ce comportement serait assez agréable – Adonis
S'il vous plaît voir la nouvelle réponse –