Giả sử tôi có hàm python chạy dài trông giống như thế này?Làm thế nào để timeout một chương trình chạy dài bằng cách sử dụng 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
Tôi muốn có thể đặt thời gian chờ là 1000ms
.
Vì vậy, tôi là một cái gì đó giống như, tạo ra một quan sát và lập bản đồ nó thông qua các tính toán cường độ trên.
a = Observable.repeat(1).map(lambda x: intns(x))
Bây giờ cho mỗi giá trị phát ra, nếu nó mất hơn 1000ms Tôi muốn chấm dứt quan sát, ngay sau khi tôi đạt 1000ms
sử dụng on_error
hoặc on_completed
a.timeout(1000).subscribe(lambda x: print(x), lambda x: print(x))
trên tuyên bố không có thời gian chờ, và gọi on_error
, nhưng nó tiếp tục kết thúc tính toán phép tính cường độ cao và chỉ sau đó trả về các câu lệnh tiếp theo. Có cách nào tốt hơn để làm điều này?
Tuyên bố cuối cùng in ra
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
ý tưởng sau đây là nếu một hàm timesout Đặc biệt, tôi muốn để có thể tiếp tục với chương trình của tôi, và bỏ qua kết quả.
Tôi đã tự hỏi nếu chức năng intns
được thực hiện trên một chủ đề riêng biệt, tôi đoán chủ đề chính tiếp tục thực hiện sau khi hết thời gian chờ, nhưng tôi vẫn muốn dừng tính năng intns
chức năng trên một chủ đề hoặc giết nó bằng cách nào đó.
Ví dụ hiển thị hành vi này sẽ khá đẹp – Adonis
Vui lòng xem câu trả lời mới –