假设我有一个看起来像这样的长时间运行的 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
。
所以我在做类似的事情,创建一个 observable 并通过上述密集计算对其进行映射。
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
线程上的计算函数,或者以某种方式杀死它。