Python基础之并发编程(三)
在并发编程的第三篇文章中,我们将会详细地介绍Python中的协程以及asyncio模块,其中包括了Python语言级别的协程实现,以及标准库中的异步IO库asyncio的使用方法。
Python语言级别的协程
协程是一种轻量级的线程,它可以自己保存自己的执行状态,从而实现异步/并发操作。在Python语言中,通过async
和await
关键字来定义协程,同时还需要借助事件循环asyncio
来调度协程的运行。下面是一个简单的协程例子:
import asyncio
async def hello():
print("Hello")
await asyncio.sleep(1)
print("World")
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
在这个例子中,我们定义了一个协程函数hello
,它打印出字符串"Hello",然后暂停1秒钟,最后再打印出字符串"World"。注意到在函数中我们使用了await asyncio.sleep(1)
语句来暂停当前协程的执行,以等待1秒钟的时间。
asyncio模块
Python标准库中提供了一个异步IO库asyncio
,它基于协程实现,提供了事件循环、任务队列、TCP/UDP Socket编程、子进程管理等一系列异步IO操作的支持。下面是一个简单的例子:
import asyncio
async def echo_server(reader, writer):
address = writer.get_extra_info('peername')
print(f"Accepted client connection from {address!r}")
while True:
data = await reader.readline()
if not data:
break
message = data.decode().strip()
print(f"Received {message!r} from {address!r}")
writer.write(data)
print(f"Closed connection to {address!r}")
writer.close()
async def main():
server = await asyncio.start_server(echo_server, '127.0.0.1', 8888)
async with server:
await server.serve_forever()
asyncio.run(main())
在这个例子中,我们定义了一个TCP Echo服务器,它接收由客户端发送的消息,然后回显(即原样返回)给客户端。在服务器的echo_server
协程函数中,我们使用reader.readline()
函数来从客户端读取数据,同时使用writer.write()
函数来将数据写回客户端。
在main
协程函数中,我们使用asyncio.start_server()
函数创建一个服务器对象,然后使用server.serve_forever()
函数来启动事件循环,从而使标准输入阻塞,直到键入Ctrl+C
,关闭服务器。
总结
简单来说,Python中的协程和异步IO是非常强大的工具,可以使编写并发程序变得更加容易。虽然学习曲线可能较陡,但是一旦掌握了它们的使用方法,就可以让你编写出更高效、更快速的程序。
以上就是Python基础之并发编程(三)的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python基础之并发编程(三) - Python技术站