Скажем, у меня есть длинная функция python, которая выглядит примерно так?
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
Я хочу установить тайм-аут 1000ms
.
Так что я донг что-то вроде, создавая наблюдаемый и сопоставляя его с помощью вышеупомянутого интенсивного вычисления.
a = Observable.repeat(1).map(lambda x: intns(x))
Теперь для каждого испускаемого значения, если требуется больше 1000 мс, я хочу закончить наблюдаемый, как только я достигнет 1000ms
, используя on_error
или on_completed
a.timeout(1000).subscribe(lambda x: print(x), lambda x: print(x))
инструкция выше получает тайм-аут и вызывает on_error
, но она продолжает заканчивать вычисление интенсивного вычисления и только затем возвращается к следующим операторам. Есть ли лучший способ сделать это?
Последний оператор печатает следующие
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
Идея заключается в том, что если какой-то конкретный тайм-аут функции, я хочу иметь возможность продолжить свою программу и игнорировать результат.
Мне было интересно, была ли функция intns
выполнена в отдельном потоке, я думаю, что основной поток продолжает выполнение после таймаута, но я все же хочу прекратить вычислять функцию intns
в потоке или как-то убить ее.