📅  最后修改于: 2023-12-03 15:04:15.767000             🧑  作者: Mango
在 Python 编程中,经常需要等待用户输入,此时程序会阻塞并等待用户输入完成后才会继续向下执行。这种情况下,我们可以在等待输入时做一些其他事情来提高程序的效率。
我们可以使用 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 模块创建两个线程:一个用于等待用户输入,一个用于每秒钟显示一次当前时间。同时,我们将显示时间的线程设置为守护线程(即主线程退出时自动退出)。
除了使用 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 模块来实现并发和协程,以达到处理其他事务的目的。