我试图弄清楚如何不为我的应用程序使用全局变量,但我想不出其他任何东西。
实际上,我正在 Flask-SocketIO 模块的帮助下编写一个 Web 界面,以便与音乐播放器实时交互。
这是我的代码片段,其中包含 play 函数(我想我只需要一个示例,然后我可以将其调整为适用于所有其他函数):
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
isPlaying = False #This is the variable that I would like to avoid making global
@socketio.on('request_play')
def cycle_play():
global isPlaying
if isPlaying == True:
socketio.emit('pause', broadcast=True)
isPlaying = False
else:
socketio.emit('play', broadcast=True)
isPlaying = True
if __name__ == '__main__':
socketio.run(app, port=5001)
这只是代码的精简版本,但我认为这足以理解我想要完成的任务。
我还需要从其他函数访问该变量,并且我需要对歌曲名称、持续时间和当前时间执行相同的操作。
预先感谢您的帮助,如果我的英语不清楚,请抱歉。
这是我使用的解决方案:
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
class Player():
def __init__(self):
self.isPlaying = False
def cycle_play(self):
if self.isPlaying == True:
socketio.emit('pause', broadcast=True)
self.isPlaying = False
else:
socketio.emit('play', broadcast=True)
self.isPlaying = True
if __name__ == '__main__':
player = Player()
socketio.on('request_play')(player.cycle_play) #this is the decorator
socketio.run(app, port=5001)