我正在研究电梯项目。当有人按下中间的按钮时,电梯应该停止。
例如:如果电梯到 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 个线程接受输入,其他线程一次移动电梯。但是有没有其他方法可以代替线程(尽管这个解决方案有效)?
最佳答案
在某些情况下,您可以在没有线程的情况下重写它,但是您没有提到如何获取用户输入。你是从套接字获取的吗?或者来自另一个其他自定义协议(protocol)等。因此,我在这里提供一些我认为可行的场景和解决方案。
- 来自 Socket:只需创建其他 get_input 并遍历协程并在最后使用 asyncio.gather 即可。
- 从控制台:然后您可以使用 asyncio 替代方案来执行输入等常见操作,例如检查此库 https://github.com/vxgmichel/aioconsole 。并如上所述使用 asyncio.gather/wait。
如果上述 2 个解决方案不适合您的用例,那么您可以创建一个状态机(如果遍历是非阻塞的并且不做太多工作)。如果 traverse 做的工作量超过了微不足道的工作量,那么这个解决方案是不合适的,因为它可能会长时间阻塞单线程中的程序
关于python - 从控制台 python 同时获取多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051795/