带有类的Python线程

时间:2013-04-17 00:33:32

标签: python multithreading

我打算发布一个例子,但是我说它搞砸了,我只是张贴了我所拥有的。放轻松我。我习惯了红宝石。 Python对我来说是全新的。

我有一个名为que的文件,其中包含一堆歌曲。我想创建一个后台线程,不断检查以查看que中是否有任何歌曲。如果它中有歌曲,则在第一行播放歌曲,然后删除第一行。 (.que.swp)。

现在的问题是,我不知道如何在后台完成所有这些工作。我有另一个类,允许用户将歌曲添加到que文件。所以他们需要同时运行。

class MusicPlayer(threading.Thread):

    def __init__(self):
        super(MusicPlayer, self).__init__()
        self.que_file = "que"
        self.playQue()

    def playQue(self):

        while 1:
            try:
                f = open(self.que_file, "r")
                songUp = f.readline()
                songUp = songUp.rstrip()
                cmd = "cvlc \"%s\" vlc://quit &>/dev/null" % (songUp)
                os.system(cmd)
                data="".join(open(self.que_file).readlines()[1:-1])
                open(".que.swp","wb").write(data)
                os.remove(self.que_file)
                os.rename(".que.swp", self.que_file)
                print "\n%s added %s to the que" % (self.user, self.dir)
            except:
                print "No Que File Exists"
                time.sleep(1)

#main#          
if __name__ == '__main__':
    player = MusicPlayer()
    player.start()
    print "helloWorld"

“helloworld”永远不会打印到终端。它只是让我的课程循环。 ps - 如果它让你感觉更好,你可以清理我任何丑陋的命令。记住我是新人。我已经在这几个小时了,并且已经求助了。

1 个答案:

答案 0 :(得分:1)

循环不会像你猜测的那样在player.start()行开始,而是在行:

player = MusicPlayer()

这是因为您在self.playQue()中致电__init__。如果删除该行,并将方法playQue的名称更改为run,则该线程应单独运行。

有关startrun的说明,请参阅instructions for the threading package

  

开始()

     

开始线程的活动。

     

每个线程对象最多只能调用一次。它安排了   object的run()方法在一个单独的控制线程中调用。