Python 超时计数器



我有一个python程序,它将侦听输入信号。但是这可能是等待很长时间,所以我希望每 5 秒显示一条消息,只说"仍在等待">

但我不希望计数器函数中的延迟 1 秒阻止程序侦听信号,因为信号是定时的,不正确的计时会产生不正确的结果。

到目前为止,我已经做到了这一点,但是每次增加 $temp_2 时,整个脚本都会延迟 1 秒

#If option number 1 was selected, proceed
if(int(input_string) == 1):
    input_string = ""
    temp_2 = 0
    print('Currently listening for messages. System still working. Please wait.')
        while True:
            if(input_0 == False):
                input_string = input_string + "0"
                temp_1 = temp_1 + "0"
            if(input_1 == False):
                input_string = input_string + "1"
                temp_1 = temp_1 + "1"
            if(len(input_string) ==  8):
                output_string = output_string + chr(int(input_string, 2))
                input_string = ""
                if(len(temp_1) == 40):
                    if(temp_1 == "0011110001100101011011100110010000111110"):
                        print('Received terminator!')
                    else:
                        temp_1 = temp_1[8::]
                #increase the counter, but don't stop the script from
                #listening for the input. can it be done? 
                temp_2 = timeout_counter(temp_2)
                print(temp_2)
                if(temp_2 == 5):
                    print('still working. not broken.')
                    temp_2 = 0

以下是我的 timeout_counter(( 函数:

def timeout_counter(temp_2):
    temp_2 = temp_2 + 1
    time.sleep(1)
    return (temp_2)

您可以使用 time.time(( 将给定迭代的时间戳和前一次迭代的时间戳进行映射,而不是使用 time.sleep。

你的算法应该是这样的:

#If option number 1 was selected, proceed
if(int(input_string) == 1):
    input_string = ""
    temp_2 = time.time()
    print('Currently listening for messages. System still working. Please wait.')
        while True:
            if(input_0 == False):
                input_string = input_string + "0"
                temp_1 = temp_1 + "0"
            if(input_1 == False):
                input_string = input_string + "1"
                temp_1 = temp_1 + "1"
            if(len(input_string) ==  8):
                output_string = output_string + chr(int(input_string, 2))
                input_string = ""
                if(len(temp_1) == 40):
                    if(temp_1 == "0011110001100101011011100110010000111110"):
                        print('Received terminator!')
                    else:
                        temp_1 = temp_1[8::]
                #increase the counter, but don't stop the script from
                #listening for the input. can it be done? 
                temp_2 = timeout_counter(temp_2)
                print(temp_2)
                if(time.time() - temp_2 >= 5.):
                    print('still working. not broken.')
                    temp_2 = time.time()

您的 timeout_counter(( 函数现在无用:)

相关内容

  • 没有找到相关文章

最新更新