Python 维护dajaxice调用可以使用的持久串行连接?

Python 维护dajaxice调用可以使用的持久串行连接?,python,django,dajaxice,Python,Django,Dajaxice,我有一个基本的django设置正在运行,目前正在实现dajaxice调用,以将一些数据写入串行连接(另一端是RainbowDuino) 但是,以下代码在与Arduino建立串行连接时有效,在Arduino复位时,必须等待向其写入数据 from django.utils import simplejson from dajaxice.decorators import dajaxice_register import time, serial def serialWrite(msg):

我有一个基本的django设置正在运行,目前正在实现dajaxice调用,以将一些数据写入串行连接(另一端是RainbowDuino)

但是,以下代码在与Arduino建立串行连接时有效,在Arduino复位时,必须等待向其写入数据

from django.utils import simplejson
from dajaxice.decorators import dajaxice_register
import time, serial

def serialWrite(msg):
    try:
        ser = serial.Serial('/dev/ttyUSB0', 9600)
        time.sleep(1.5) #wait for arduino to reset
        ser.write(msg)
        return "Running Animation"
    except:
        return "Failed to communicate with cube"

@dajaxice_register
def animate(request, data):
    msg = serialWrite(str(data))
    return simplejson.dumps({'message':msg})
我对python和django都是新手,所以我不确定如何维护一个可以在这个环境中使用串行连接的持久对象。从我自己的阅读和测试中,我可以看到dajaxice注册的方法仅在收到相应的按钮点击时才被调用


在这种情况下,我是否可以使用我的应用程序的视图来实例化串行连接,如果可以,我如何与dajaxice调用共享连接?

如果您的运行时环境很简单,中间件可能是一种选择。


未经测试,如果您在多线程环境(如
manage.py runserver
)中运行,可能需要锁定。

这可能不是一个理想的设置,但您是否有设置持久连接的特定原因?可能还有其他方法,但它们实际上取决于您的运行时设置(您实际如何为Django应用程序提供服务)。另一种方法可能是运行一个单独的进程,该进程将与Arduino建立持久连接,并侦听Django(可能通过Redis)发送的命令。老实说,这只是个人喜好,当重置时4x4 led立方体刚刚关闭时,它看起来并不好。目前,django应用程序是由一个树莓pi提供的,这是一个学校项目的要求。我会调查Redis的,谢谢你的建议。谢谢,看起来效果不错。明天我要用Arduino测试一下,我肯定会接受的。
// middleware/__init__.py
class ArduinoMiddleware:

    def __init__(self):
        self.serial = serial.Serial('/dev/ttyUSB0', 9600)
        time.sleep(1.5)

    def process_request(self, request):
        request.serialWrite = self.serialWrite

    def serialWrite(self, msg):
        try:
            self.serial.write(msg)
            return "Running Animation"
        except:
            return "Failed to communicate with cube"

// ajax.py
@dajaxice_register
def animate(request, data):
    msg = request.serialWrite(str(data))
    return simplejson.dumps({'message':msg})

// settings.py
...
MIDDLEWARE_CLASSES = (
  'middleware.ArduinoMiddleware',
  ...
)