将current_thread中的属性设置为状态持有者

时间:2014-12-01 22:17:27

标签: python multithreading wsgi

我有一个wsgi应用程序,可以在不同的python Web服务器环境(cherrypy,uwsgi或gunicorn)中运行,但不是基于greenlet的。该应用程序处理某些REST api和用户界面的不同路径。在应用程序的任何http调用期间,需要知道调用的上下文是什么,因为实现逻辑方法共享API调用和UI调用的代码,并且在许多模块中分离的一些逻辑应该根据不同的方式做出不同的反应。上下文。简单直接的方法是将参数传递给实现代码,例如ApiCall(caller = client_service_id)或UserCall(caller = user_id),但将此参数传播到所有可能的模块是一件痛苦的事。像这样在线程对象中设置上下文是一个很好的解决方案吗?

def set_context(ctx):
    threading.current_thread().ctx = ctx

def get_context():
    return threading.current_thread().ctx

所以在http调用处理程序的开头某处调用set_context,我们可以根据环境数据构造上下文ovject,然后在代码的任何部分使用get_context(),我们必须根据上下文做出反应。实现这一目标的最佳做法是什么?谢谢!

0 个答案:

没有答案