gpt4 book ai didi

Python:使用定时器终止循环

转载 作者:行者123 更新时间:2023-11-28 19:00:49 27 4
gpt4 key购买 nike

我是 python 的新手,并且正在按照这种逻辑从事学校项目:用户必须在给定时间内尽快回答一系列问题。

例如,分配的时间是 30 秒,我会循环浏览问题字典并获得答案。超时时,循环将开始,即使脚本仍在等待输入。

def start_test():
for item on questions:
print(item)
answers.append(input(' : '))

我试过使用多处理和多线程,但我发现 stdin 不能处理子进程。

我正在寻找类似的东西:

while duration > 0:
start_test()

def countdown():
global duration
while duration > 0:
duration -= 1
time.sleep(1)
# something lime start_test().stop()

但我不知道如何与 start_test 函数并行运行 countdown 函数。

有什么想法吗?

最佳答案

据我所知,输入只能通过主线程访问。我可能错了。但是,如果是这种情况,您需要非阻塞输入。

检查这个blog .以下答案基于此。

注意:这是一个非常快速且肮脏的解决方案。

我已经在 Linux 上检查过了。如果它在 Windows 上不起作用,请尝试 this链接以供进一步引用。

import _thread
import sys
import select
import time

def start_test():
questions = ['1','2','3']
answers = []

for item in questions:
print(item)

# Input in a non-blocking way
loop_flag = True
while loop_flag:
# Read documenation and examples on select
ready = select.select([sys.stdin], [], [], 0)[0]

if not ready:
# Check if timer has expired
if timeout:
return answers
else:
for file in ready:
line = file.readline()
if not line: # EOF, input is closed
loop_flag = False
break
elif line.rstrip():
# We have some input
answers.append(line)
# So as to get out of while
loop_flag = False
# Breaking out of for
break

return answers

def countdown():
global timeout
time.sleep(30)
timeout = True

# Global Timeout Flag
timeout = False

timer = _thread.start_new_thread(countdown, ())

answers = start_test()
print(answers)

关于Python:使用定时器终止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com