django subprocess p.wait()不返回web

时间:2014-10-18 12:38:21

标签: django subprocess

使用django按钮,我需要启动多重音​​乐(随机选择)。

在我的models.py中,我有两个函数'playmusic'和'playmusicrandom':

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)

使用此代码,播放三个音乐(一个接一个),但在执行期间网页只是“正在加载......” 有没有办法在循环期间向用户显示刷新的网页? 谢谢。

1 个答案:

答案 0 :(得分:1)

在等待playmusicrandom()完成时,您的视图无法向网络服务器返回任何内容。

您需要安排playmusicrandom()在之后执行任务您从视图中返回HTTP状态。

这意味着您可能需要一个线程(或类似的解决方案)。

您的观点将包含以下内容:

import threading

t = threading.Thread(target=player_model.playmusicrandom,
                             args=request)
t.setDaemon(True)
t.start()
return HttpResponse()

此代码段来自here,您可以在其中找到有关您所面临问题的详细信息以及可能的解决方案。