使用django按钮,我需要启动多重音乐(随机选择)。
在我的models.py中,我有两个函数'playmusic'和'playmusicrandom':
class Player()
def playmusic(self, music):
if self.isStarted():
self.stop()
command = ("sudo /usr/bin/mplayer "+music.path)
p = subprocess.Popen(command+str(music.path), shell=True)
p.wait()
def playmusicrandom(request):
conn = sqlite3.connect(settings.DATABASES['default']['NAME'])
cur = conn.cursor()
cur.execute("SELECT id FROM webgui_music")
list_id = [row[0] for row in cur.fetchall()]
### Get three IDs randomly from the list ###
selected_ids = random.sample(list_id, 3)
for i in (selected_ids):
music = Music.objects.get(id=i)
player.playmusic(music)
def stop(self):
"""
Kill mplayer process
"""
p = subprocess.Popen("sudo killall mplayer", shell=True)
p.communicate()
在我的观点中,我使用一个线程来调用'playmusicrandom':
def playmusicrandom(request):
player = Player()
#player.playmusicrandom()
t = threading.Thread(target=player.playmusicrandom)
t.setDaemon(True)
t.start()
return redirect('homepage')
因此,当我点击播放时,会播放三个音乐(一个接一个)。 但是当我点击停止时,显然,当前的mplayer进程被终止,第二个进程被播放......
我读过这不是一个好主意,但在我的情况下是否有一个解决方案来停止在视图中启动的线程? 谢谢。
PS:我想避免将停止改为'杀死,睡觉,杀人等......'答案 0 :(得分:0)
根据我的经验,在django应用程序中进行后台处理的最佳方法是使用芹菜。请查看http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html,看看您需要在设置中包含它。