gpt4 book ai didi

Python 线程与类

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:06 24 4
gpt4 key购买 nike

我本来想发布一个例子,但我说管它,我只是发布我所拥有的。对我轻松一些。我已经习惯了 ruby 。 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 - 如果这让你感觉好一点,你可以清理我的任何丑陋的命令。请记住我是新人。我已经花了几个小时来处理这个问题,并且不得不询问。

最佳答案

正如您可能猜测的那样,循环不是从 player.start() 行开始,而是从以下行开始:

player = MusicPlayer()

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

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

start()

Start the thread’s activity.

It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.

关于Python 线程与类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com