@@ -82,22 +82,39 @@ def request_refresh(when='now'):
82
82
83
83
def event_or_refresh (timeout = None ):
84
84
if timeout is None :
85
- timeout = 1
86
- else :
87
- timeout = min (1 , timeout )
88
- starttime = time .time ()
85
+ timeout = 2 ** 25 # a year
89
86
while True :
90
- t = time .time ()
91
- refresh_requests .sort (key = lambda r : 0 if r .when == 'now' else r .when )
92
- if refresh_requests and (refresh_requests [0 ].when == 'now' or refresh_requests [- 1 ].when < t ):
93
- yield refresh_requests .pop (0 )
94
- elif reload_requests :
95
- e = reload_requests .pop ()
96
- yield e
97
- else :
98
- e = input_generator .send (timeout )
99
- if starttime + timeout < time .time () or e is not None :
87
+ starttime = time .time ()
88
+ while True :
89
+ t = time .time ()
90
+ refresh_requests .sort (key = lambda r : 0 if r .when == 'now' else r .when )
91
+ if refresh_requests and (refresh_requests [0 ].when == 'now' or refresh_requests [- 1 ].when < t ):
92
+ yield refresh_requests .pop (0 )
93
+ elif reload_requests :
94
+ e = reload_requests .pop ()
100
95
yield e
96
+ else :
97
+ if refresh_requests :
98
+ next_refresh = refresh_requests .pop (0 )
99
+ time_until_next_scheduled_event = max (0 , next_refresh .when - t )
100
+ else :
101
+ next_refresh = None
102
+ time_until_next_scheduled_event = 2 ** 25
103
+
104
+ time_to_wait = min (time_until_next_scheduled_event , max (0 , starttime + timeout - t ))
105
+
106
+ e = input_generator .send (time_to_wait )
107
+
108
+ if next_refresh is not None :
109
+ if e is None and time .time () > t + time_until_next_scheduled_event :
110
+ yield next_refresh
111
+ continue
112
+ else :
113
+ refresh_requests .insert (0 , next_refresh )
114
+
115
+ if starttime + timeout < time .time () or e is not None :
116
+ yield e
117
+ break
101
118
102
119
def on_suspend ():
103
120
window .__exit__ (None , None , None )
@@ -144,7 +161,7 @@ def process_event(e):
144
161
for _ , e in izip (find_iterator , event_or_refresh (0 )):
145
162
if e is not None :
146
163
process_event (e )
147
- for e in event_or_refresh ():
164
+ for e in event_or_refresh (None ):
148
165
process_event (e )
149
166
150
167
if __name__ == '__main__' :
0 commit comments