@@ -17,7 +17,7 @@ def __init__(self):
17
17
self .cnt = 0
18
18
19
19
def time (self ):
20
- return time .time ()
20
+ return time .ticks_ms ()
21
21
22
22
def create_task (self , coro ):
23
23
# CPython 3.4.2
@@ -28,13 +28,16 @@ def call_soon(self, callback, *args):
28
28
self .call_at (self .time (), callback , * args )
29
29
30
30
def call_later (self , delay , callback , * args ):
31
- self .call_at (self .time () + delay , callback , * args )
31
+ self .call_at (time .ticks_add (self .time (), int (delay * 1000 )), callback , * args )
32
+
33
+ def call_later_ms (self , delay , callback , * args ):
34
+ self .call_at (time .ticks_add (self .time (), delay ), callback , * args )
32
35
33
36
def call_at (self , time , callback , * args ):
34
37
# Including self.cnt is a workaround per heapq docs
35
38
if __debug__ :
36
39
log .debug ("Scheduling %s" , (time , self .cnt , callback , args ))
37
- heapq .heappush (self .q , (time , self .cnt , callback , args ))
40
+ heapq .heappush (self .q , (time , self .cnt , callback , args ), True )
38
41
# print(self.q)
39
42
self .cnt += 1
40
43
@@ -43,17 +46,17 @@ def wait(self, delay):
43
46
# with IO scheduling
44
47
if __debug__ :
45
48
log .debug ("Sleeping for: %s" , delay )
46
- time .sleep (delay )
49
+ time .sleep_ms (delay )
47
50
48
51
def run_forever (self ):
49
52
while True :
50
53
if self .q :
51
- t , cnt , cb , args = heapq .heappop (self .q )
54
+ t , cnt , cb , args = heapq .heappop (self .q , True )
52
55
if __debug__ :
53
56
log .debug ("Next coroutine to run: %s" , (t , cnt , cb , args ))
54
57
# __main__.mem_info()
55
58
tnow = self .time ()
56
- delay = t - tnow
59
+ delay = time . ticks_diff ( t , tnow )
57
60
if delay > 0 :
58
61
self .wait (delay )
59
62
else :
@@ -95,6 +98,9 @@ def run_forever(self):
95
98
return arg
96
99
elif isinstance (ret , type_gen ):
97
100
self .call_soon (ret )
101
+ elif isinstance (ret , int ):
102
+ # Delay
103
+ delay = ret
98
104
elif ret is None :
99
105
# Just reschedule
100
106
pass
@@ -104,7 +110,7 @@ def run_forever(self):
104
110
if __debug__ :
105
111
log .debug ("Coroutine finished: %s" , cb )
106
112
continue
107
- self .call_later (delay , cb , * args )
113
+ self .call_later_ms (delay , cb , * args )
108
114
109
115
def run_until_complete (self , coro ):
110
116
def _run_and_stop ():
@@ -159,7 +165,10 @@ def get_event_loop():
159
165
return _event_loop
160
166
161
167
def sleep (secs ):
162
- yield Sleep (secs )
168
+ yield int (secs * 1000 )
169
+
170
+ def sleep_ms (ms ):
171
+ yield ms
163
172
164
173
def coroutine (f ):
165
174
return f
0 commit comments