从单独的线程访问app_globals

时间:2011-08-12 11:48:58

标签: python multithreading pylons

我想在我的Pylons项目中通过python Queue对象与它进行交互,为重度计算创建一个单独的线程。问题是我需要访问app_globals对象。当我尝试这样做时,我得到了一个

TypeError: No object (name: app_globals) has been registered for this thread

我也试图以这种方式访问​​app_globals:

app_globals = config.get('pylons.app_globals')
self.cadfile = app_globals.pm.get_upload_path(session, 'cadfile')

但后来又出现了另一个错误:

AttributeError: 'NoneType' object has no attribute 'pm'

我应该如何从单独的线程访问app_globals?

1 个答案:

答案 0 :(得分:0)

可能你必须将app_globals传递给线程作为启动参数或通过队列传递吗?我并不害羞,但我认为app_globals实现为threading.local

EG。

class MyWorker(threading.Thread):
    def __init__(self, local_app_globals, *args, **kwargs):
        self.app_globals=local_app_globals
        super(MyWorker, self).__init__(*args, **kwargs)

    def run():
        #use self.app_globals as app_globals

t=MyWorker(app_globals)
t.start()