2013-04-17 2 views
1

예제를 게시 할 예정 이었지만 스크류로 말했지만 대신 가지고있는 것을 게시합니다. 나 좀 쉬워. 나는 루비에 익숙해. 파이썬은 나에게 아주 새로운 것이다.클래스가있는 파이썬 스레드

나는 노래 한 묶음을 보유하고있는 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

은 루프는 추측 될 수로 player.start() 라인에 있지 시작하지만 라인에서 : 당신이 __init__self.playQue()를 호출하기 때문에

player = MusicPlayer() 

이다. 해당 줄을 제거하고 playQue의 메서드 이름을 run으로 변경하면 스레드가 별도로 실행됩니다.

startrun에 대한 설명은 instructions for the threading package를 참조하십시오

시작()

시작 스레드의 활동.

스레드 개체 당 최대 한 번 호출해야합니다. 개체의 run() 메서드가 별도의 컨트롤 스레드에서 호출되도록 정렬합니다.

+0

고마워요! 그것은 나를 미치게했다. 실제로 그 실행 방법이 무엇인지 알지 못했습니다. 미래를위한 명확한 언급 –