Python访问全局连接实例

时间:2013-05-08 20:33:36

标签: python connection instance global

我正在使用Velleman K8055 USB实验板,它有一个我正在导入的python模块。

为了让K8055正常运行,我必须在K8055模块中创建一个类的实例,然后打开与主板的连接...据我所知,我必须保持该连接/实例运行,并且使用该唯一实例来控制电路板,即使是在子模块内也是如此。

我很难搞清楚如何从我的子模块/包中访问以前初始化的K8055实例......

我的应用程序结构非常类似于以下内容......

SmartyPi/
SmartyPi/smartypi.py
SmartyPi/smartypi/__init__.py
SmartyPi/smartypi/appglobals.py
SmartyPi/smartypi/scheduler/
SmartyPi/smartypi/scheduler/__init__.py
SmartyPi/smartypi/scheduler/Scheduler.py
SmartyPi/smartypi/web/
SmartyPi/smartypi/web/__init__.py
SmartyPi/smartypi/web/k8055.py
SmartyPi/smartypi/web/root.py
SmartyPi/smartypi/web/schedule.py

在'SmartyPi / appglobals.py'中,我用以下内容初始化了我的k8055对象/连接实例:

from pyk8055 import k8055
globalK8055 = k8055(0) //Open connection to the I/O board on channel 1

我希望能够从以下地方访问“globalK8055”的相同实例:

SmartyPi/smartypi/web/k8055.py
SmartyPi/smartypi/web/schedule.py

我的'SmartyPi / smartypi / web / k8055.py'目前看起来像这样:

import cherrypy

from jinja2 import Environment, PackageLoader

import time

def render_template(template, **params):
    jinja_env = Environment(loader=PackageLoader('smartypi', 'static/templates'))
    return jinja_env.get_template(template).render(params)

class K8055:
    '''
    K8055 Setup Class
    '''

    @cherrypy.expose
    def index(self, **kwargs):
        '''
        Defines k8055 Page
        '''
        if kwargs:                
            k8055Set(kwargs) //Set a Channel On/Off

            return render_template("k8055.html", version = kwargs) //Render Web Page

        else:
            return render_template("k8055.html", version = "SmartyPi v0.01")

def k8055Set(kwargs):

    print 'In k8055Set function: ' + str(kwargs)

    from smartypi.appglobals import globalK8055 as k

    if 'digOut1' in kwargs:

        if kwargs['digOut1'] == 'on':
            print 'Turning On Digital Output 1'
            print k.SetDigitalChannel(1)

        elif kwargs['digOut1'] == 'off':
            print 'Turning Off Digital Output 1'
            print k.ClearDigitalChannel(1)

    elif 'digOut2' in kwargs:

        if kwargs['digOut2'] == 'on':
            print 'Turning On Digital Output 2'
            print k.SetDigitalChannel(2)

        elif kwargs['digOut2'] == 'off':
            print 'Turning Off Digital Output 2'
            print k.ClearDigitalChannel(2)

当我第一次调用'k8055Set()'函数时,电路板的行为符合预期,但再次调用它(从网页发出另一个POST请求)似乎创建了我与I / O连接的另一个实例死板.....只有通过重新启动我的应用程序才能获得另一个“干净且新的”连接到我的主板,这只能被访问一次......

有人对我如何实现这个目标有任何想法吗?

0 个答案:

没有答案