Web Services Made Easy (WSME)“通过提供简单而强大的键入功能来简化REST Web服务的编写,而无需直接操纵请求和响应对象”。 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的了解不足,这引起了我的疑虑。人们怎么看?这真的是一个问题,还是我缺少什么?

最佳答案

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

obj = datatype()

这将创建一个新实例。

这些实例具有自己的属性; class属性永远不会改变,因此每个Person实例的值永远不会在请求之间共享。

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

在技​​术层面上,wsattr()对象实现data descriptor protocol;就像内置的 property type一样,每当检索或分配或删除属性时,它们就会绑定(bind)到实例,从而决定了在这些情况下应该发生的情况。如果您想了解更多有关该过程的信息,也许我在property类型上的帖子可以为您提供帮助:How does the @property decorator work?

10-06 08:32