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

标签 python python-3.x multithreading python-2.7 python-multithreading

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

例如:如果电梯到 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)等。因此,我在这里提供一些我认为可行的场景和解决方案。

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

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

关于python - 从控制台 python 同时获取多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59051795/

相关文章:

java - 如何使用 wait() 和 notify() 正确暂停线程

python - 如何通过 S3 签名 URL 上传 zip 文件

python - 使用字符串方法理解代码

python - Pandas:一列具有重复组到多列

python-3.x - Cartopy - 手动 set_extent

java - 如何在我的用例中协调线程

Python3 看不到 Django

python - 使用 BeautifulSoup 删除 td 元素之间/之后的空格

仅在第一次调用时计算结果的 Python 方法,无需额外参数

C# 多客户端服务器应用程序的问题