📜  python 在等待输入时做一些事情 - Python (1)

📅  最后修改于: 2023-12-03 15:04:15.767000             🧑  作者: Mango

Python 在等待输入时做一些事情

在 Python 编程中,经常需要等待用户输入,此时程序会阻塞并等待用户输入完成后才会继续向下执行。这种情况下,我们可以在等待输入时做一些其他事情来提高程序的效率。

使用 threading 模块实现并发

我们可以使用 Python 的 threading 模块来实现并发,以达到在等待用户输入时处理其他事务的目的。

下面是一个例子,我们在等待用户输入的同时,也用线程来展示当前时间:

import threading
import time

# 等待用户输入的函数
def wait_for_input():
    input_str = input("请输入:")
    print("您输入的是:", input_str)

# 显示当前时间的函数
def show_current_time():
    while True:
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        time.sleep(1)

# 创建线程并启动
input_thread = threading.Thread(target=wait_for_input)
time_thread = threading.Thread(target=show_current_time)
time_thread.daemon = True

input_thread.start()
time_thread.start()

input_thread.join()

我们使用 threading 模块创建两个线程:一个用于等待用户输入,一个用于每秒钟显示一次当前时间。同时,我们将显示时间的线程设置为守护线程(即主线程退出时自动退出)。

使用 asyncio 模块实现协程

除了使用 threading 模块,我们还可以利用 Python 3 中新增的 asyncio 模块来实现协程并发。

以下是一个等待用户输入的协程,它会与另一个协程一起运行:

import asyncio

# 等待用户输入的协程
async def wait_for_input():
    input_str = await asyncio.get_event_loop().run_in_executor(None, input, "请输入:")
    print("您输入的是:", input_str)

# 显示当前时间的协程
async def show_current_time():
    while True:
        print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        await asyncio.sleep(1)

# 运行协程
async def main():
    await asyncio.gather(wait_for_input(), show_current_time())

asyncio.run(main())

我们使用 asyncio 模块中的协程来代替线程,在等待用户输入时同时也运行一个显示时间的协程。我们将这两个协程放在一个主协程中一起运行。当我们运行 asyncio.run(main()) 时,这个程序就开始运行了。

总结

在 Python 编程中,我们经常需要等待用户输入,此时程序会阻塞并等待用户输入完成后才会继续向下执行。在等待用户输入时,我们可以利用 threading 模块和 asyncio 模块来实现并发和协程,以达到处理其他事务的目的。