同时从控制台 python 获取多个输入



我正在研究电梯程序。当有人按下中间的按钮时,电梯应该停止。

例如:如果电梯转到 11 楼,中间有人按下 3 楼,那么它应该停止。

我尝试使用多线程程序,它的工作原理如下:

while(True):
t1= threading.Thread(target=get_input, name='t1')
t2= threading.Thread(target=traverse, name='t2')
t1.start()
time.sleep(5)
traverse()
t2.start()

其中,横移功能将电梯移动到所需楼层。

简而言之,我实现的想法是 1 个线程一次接受输入,其他线程移动电梯。但是有没有其他方法可以代替线程(尽管此解决方案有效(?

在某些情况下,您可以在不线程的情况下重写它,但是您没有提到如何获取用户输入。 你从套接字得到的吗? 或来自其他自定义协议等。因此,我在这里提供一些我认为可行的场景和解决方案。

  1. 从套接字:只需创建其他get_input并遍历协程,并在最后使用 asyncio.gather。
  2. 从控制台:然后,您可以使用asyncio替代方案进行输入等常见操作,例如检查此库 https://github.com/vxgmichel/aioconsole 并使用如上所述的asyncio.gather/wait。

如果上述 2 个解决方案不适合您的用例,那么如果遍历是非阻塞的并且不做太多工作,您可以创建一个状态机。 如果遍历所做的工作量超过微不足道的工作量,那么这个解决方案是不合适的,因为它可能会长时间阻塞单线程中的程序

最新更新