简体   繁体   English

每X秒运行一次代码

[英]run code every X seconds

I Have infinite loop that read bytes from serial port, I want to save the read data to firebase database every X seconds. 我有一个从串行端口读取字节的无限循环,我想每X秒将读取的数据保存到Firebase数据库。

I used this code snippet but it's not helping: 我使用了以下代码段,但没有帮助:

import threading

def printit():
  threading.Timer(5.0, printit).start()
  print "Hello, World!"

printit()

This is my code 这是我的代码

import serial

ser = serial.Serial()
ser.baudrate = 115200
ser.port = "/dev/ttyUSB0"
ser.timeout = 30
try:
    try:
        while 1:
            line = ser.readline().rstrip().decode('utf-8')

            # print("save data here every X seconds)
    except KeyboardInterrupt:
        ser.close()  # Close port
        pass
except serial.serialutil.SerialException as e:
    print(str(e))

I can't use sleep because it blocking the main thread,So how to let the code read continuously and print "data saved" every X seconds (I'll save to database in my case) 我不能使用睡眠,因为它阻塞了主线程,所以如何让代码连续读取并每隔X秒打印“保存的数据”(我将保存到数据库中)

Thanks to Lutz Horn for the suggestion in the comment, I resolve the problem like that : 感谢Lutz Horn在评论中的建议,我解决了这样的问题:

import schedule
import time
import serial

ser = serial.Serial()
ser.baudrate = 115200
ser.port = "/dev/ttyUSB0"
ser.timeout = 30

schedule.every(10).seconds.do(save_db)
try:
    try:
        while 1:
            schedule.run_pending()
            line = ser.readline().rstrip().decode('utf-8')
            # here every 10 seconds the function save_db will be called 
    except KeyboardInterrupt:
        ser.close()  # Close port
        pass
except serial.serialutil.SerialException as e:
    print(str(e))

I hope i have understood you correctly. 我希望我正确地理解了你。 Use time.time() to set timer. 使用time.time()设置计时器。

import time

def doEvery_X_Seconds():
        print("I do it every X seconds")
        time.sleep(1)

TIMER_LIMIT = 5
setTimer = time.time()

while(1):

        print("hello world")
        if(time.time() - setTimer >= TIMER_LIMIT):
                doEvery_X_Seconds()
                setTimer = time.time()

There is time.sleep(1) only to demonstrate, that it works. 这里有time.sleep(1)仅用于演示它的工作原理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM