python WSME与线程安全

2024-09-27 20:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

Web Services Made Easy (WSME)“通过提供简单而强大的类型,简化了restweb服务的编写,消除了直接操作请求和响应对象的需要”。WSME允许您使用python类描述服务公开的资源。WSME似乎要求您使用类变量来执行此操作,例如:

class Person(wsme.types.Base):
    lastname = wsme.type.wsattr(unicode)
    firstname = wsme.type.wsattr(unicode)

这样做允许WSME使用class对象作为模板来编组和反编组该类的实例。然后在WSME修饰的代码中使用此类的实例,WSME分别执行请求和响应主体的解组和封送工作。你知道吗

但是,我对以这种方式使用WSME构建的任何服务的线程安全性有些担心。如果一个服务同时收到两个对不同“person”资源的GET请求,那么在我看来,为这些请求提供服务的线程可能会覆盖彼此的“lastname”、“firstname”等属性。即使代码被正确地编写为使用Person类的单独的本地实例,这些属性在类级别定义的事实意味着它们被该类的所有实例共享。你知道吗

我希望在我对WSME或python的理解中有一些不足引起了我的关注。人们怎么看?这真的是个问题还是我遗漏了什么?你知道吗


Tags: 对象实例代码typeunicode资源firstname线程
1条回答
网友
1楼 · 发布于 2024-09-27 20:20:49

WSME根据您定义的类创建实例。例如,在接收JSON响应时,expected datatype is called

obj = datatype()

这将创建一个新实例。你知道吗

这些实例有自己的属性;类属性永远不会更改,因此每个Person实例的值永远不会在请求之间共享。你知道吗

这里线程之间没有共享数据的威胁。你知道吗

在技术层面上,wsattr()对象实现了data descriptor protocol;与内置的^{} type一样,每当检索、分配或删除属性时,它们都会绑定到实例,让它决定在这些情况下应该发生什么。如果您想了解更多关于这个过程的信息,我在property类型上的文章可能会有所帮助:How does the @property decorator work?

相关问题 更多 >

    热门问题