Python访问连接的全局实例

2024-05-13 03:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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”里/应用程序全局.py'我已经初始化了k8055对象/连接的实例:

^{pr2}$

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

^{3}$

我的“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板连接的实例,该实例已失效。。。。。只有重新启动我的应用程序,我才能获得另一个'干净和新'的连接到我的董事会,这是只适合访问一次。。。在

有人想知道我该怎么做吗?在


Tags: 模块实例pyimportwebiftemplaterender