以下是一个简单的示例,演示如何在 Tornado 中使用同步原语(Lock):
import tornado.ioloop
import tornado.web
from tornado.locks import Lock
# 共享资源
shared_resource = 0
# 创建一个互斥锁
lock = Lock()
class MainHandler(tornado.web.RequestHandler):
async def get(self):
global shared_resource
# 在访问共享资源之前获取锁
async with lock:
# 在临界区内操作共享资源
shared_resource += 1
self.write("Shared Resource: {}".format(shared_resource))
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
在这个示例中,Lock 被用于确保在修改 shared_resource 时的互斥性,防止多个协程同时修改它。在 MainHandler 的 get 方法中,使用 async with lock 来获取锁,进入临界区,完成操作后自动释放锁。
这样可以确保在同一时刻只有一个请求能够修改 shared_resource,避免了竞态条件和数据不一致性的问题。
转载请注明出处:http://www.zyzy.cn/article/detail/7442/Tornado