2014-12-10 123 views
1

Web Services Made Easy (WSME)“通过提供简单而强大的输入,消除了直接操作请求和响应对象的需要,从而简化了REST Web服务的编写”。 WSME允许您使用python类来描述服务公开的资源。 WSME似乎需要你这样做使用像类变量:python WSME和线程安全

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

这样做,这样允许WSME使用类对象作为编组和类的解组实例的模板。然后,您在WSME装饰的代码中使用此类的实例,并且WSME执行解组和编组(分别)请求和响应主体的工作。

但是我对使用WSME以这种方式构建的任何服务的线程安全性有一些担忧。如果一个服务或多或少地同时接收到两个不同“人”资源的GET请求,那么在我看来,服务于这些请求的线程有覆盖彼此的“姓”,“名”等属性的风险。即使代码被正确编写以使用Person类的单独本地实例,这些属性在类级别定义的事实意味着它们由该类的所有实例共享。

我希望我的WSME或python的理解中有些东西缺乏,这会导致我不再担心。人们认为什么?这真的是一个问题,还是有我缺少的东西?

回答

1

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

obj = datatype() 

这将创建一个新的实例。

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

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

在技术层面上,wsattr()对象实现了data descriptor protocol;就像内置的property type一样,只要属性被检索或分配或删除,就会将它们绑定到实例上,让它决定在这些情况下应该发生什么。如果你想了解更多关于这个过程的信息,或许我的property类型的帖子可以帮助:How does the @property decorator work?