我有一个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(( 函数现在无用:)