Python timeout counter?

I have a python program that will listen for an input signal. But it can be a very long time when it is waiting, so I want every message to be displayed every 5 seconds, which just says "still waiting"

But I don't want the 1 second delay in the counter function to stop the program from listening to the signal when the signal is synchronized and the wrong time will give the wrong result.

I have gotten to this so far, but the whole script is delayed by 1 second every time temp_2 increases

#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

      

Below is my timeout_counter () function:

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

      

+3


source to share


1 answer


Instead of using time.sleep, you can simply map the timestamp at a given iteration and the timestamp to the previous one using time.time ().

Your algorithm should look like this:



#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 () function is useless now :)

+1


source







All Articles