reactor: Support pause() command even when the reactor is not running
If the reactor isn't running then implement pause using the system sleep command. This simplifies the users of pause(). Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
7c991399ac
commit
565861f680
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import select, math
|
||||
import select, math, time
|
||||
import greenlet
|
||||
import chelper
|
||||
|
||||
|
@ -71,9 +71,17 @@ class SelectReactor:
|
|||
return 0.
|
||||
return min(1., max(.001, self._next_timer - self.monotonic()))
|
||||
# Greenlets
|
||||
def _sys_pause(self, waketime):
|
||||
# Pause using system sleep for when reactor not running
|
||||
delay = waketime - self.monotonic()
|
||||
if delay > 0.:
|
||||
time.sleep(delay)
|
||||
return self.monotonic()
|
||||
def pause(self, waketime):
|
||||
g = greenlet.getcurrent()
|
||||
if g is not self._g_dispatch:
|
||||
if self._g_dispatch is None:
|
||||
return self._sys_pause(waketime)
|
||||
return self._g_dispatch.switch(waketime)
|
||||
if self._greenlets:
|
||||
g_next = self._greenlets.pop()
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import logging, threading, time
|
||||
import logging, threading
|
||||
import serial
|
||||
|
||||
import msgproto, chelper, util
|
||||
|
@ -338,10 +338,10 @@ def arduino_reset(serialport, reactor):
|
|||
# First try opening the port at 1200 baud
|
||||
ser = serial.Serial(serialport, 1200, timeout=0)
|
||||
ser.read(1)
|
||||
time.sleep(0.100)
|
||||
reactor.pause(reactor.monotonic() + 0.100)
|
||||
# Then try toggling DTR
|
||||
ser.dtr = True
|
||||
time.sleep(0.100)
|
||||
reactor.pause(reactor.monotonic() + 0.100)
|
||||
ser.dtr = False
|
||||
time.sleep(0.100)
|
||||
reactor.pause(reactor.monotonic() + 0.100)
|
||||
ser.close()
|
||||
|
|
Loading…
Reference in New Issue