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)
source to share
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 :)
source to share