我有一个线程在100毫秒内执行一次轮询操作。 一段时间后,当应用程序继续运行时,线程显然没有任何理由消失。
线程未被阻止,因为如果我打印应用程序中存在的所有线程,则轮询线程不存在。
代码如下:
def run(self):
logger.info('PollThread thread started...')
last_poll_time = curr_ms() / 1000
while not self._stop_event.isSet():
logger.debug('will do stuff')
# doing stuff
logger.debug('done!')
# sleep until next polling cycle
curr_time = curr_ms() / 1000
logger.debug('thread present 1')
time_from_last_poll = curr_time - last_poll_time
if IO_POLLING_PERIOD > time_from_last_poll:
sleep_period = IO_POLLING_PERIOD - time_from_last_poll
if sleep_period > IO_POLLING_PERIOD:
sleep_period = IO_POLLING_PERIOD
logger.debug('thread present 2')
logger.debug('thread present 2')
time.sleep(sleep_period)
logger.debug('thread present 3')
logger.debug('thread present 4')
last_poll_time = curr_ms() / 1000
logger.debug('thread present 5')
logger.info('terminated....')
curr_ms()
以这种方式定义:
def curr_ms():
return int(round(time.time() * 1000))
IO_POLLING_PERIOD
是:
IO_POLLING_PERIOD = 0.1
打印“螺纹存在1”后,线程消失。 之后不会打印任何消息。
调试特别困难,因为问题可能会在运行几天后发生一次。 在Raspberry Pi 1上运行的代码。
已解决:由于日志字符串格式错误,线程崩溃了。在我上面提到的代码中,我删除了该行以阐明代码结构。添加try / catch后,我找到了问题。线程崩溃不会导致应用程序退出。