繁体   English   中英

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

[英]Take multiple inputs simultaneously from console 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()

其中 traverse 函数将电梯移动到所需楼层。

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

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

  1. 从 Socket :只需制作其他 get_input 并遍历协程并在最后使用 asyncio.gather 。
  2. 从控制台:然后我们可以使用 asyncio 替代品进行输入等常见操作,例如检查这个库https://github.com/vxgmichel/aioconsole 并使用 asyncio.gather/wait 如上所述。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM