2016-08-18 92 views
0

我在python 3中製作了一個簡單的腳本,它進入了一些文件夾(所有文件都被稱爲「recup_dir.x」,x保持1到777之間的數字)並搜索包含「firefox」單詞的文件。由於文件太多,而且這個過程需要很長時間,所以我決定實施多線程。下面是代碼:如何讓線程繼續循環

import os, threading 

def loop(): 
    for x in range(800): 
     inizialize().start() 

class inizialize(threading.Thread): 

    def run(self): 
     self.program() 

    def program(self): 
     n = list(range(778)) 
     n.pop(0) 
     for z in n: 
      Path = ("/home/user/Desktop/files/recup_dir.%s/" % (z)) 
      filelist = os.listdir(Path) 
      print (Path) 
      for x in filelist: 
       try: 
        with open(Path + x, "r", encoding="ascii") as y: 
         for line in y: 
          if "firefox" in line: 
           print ("Found in %s !" % (x)) 
           exit (1) 
       except: 
        pass 

loop() 

的問題是,螺紋(即800)總是做同樣的操作,他們從來沒有傳遞到下一個文件夾中。他們總是留在第一個(recup_dir.1)。

我該怎麼做讓線程繼續在其他文件夾中搜索?

回答

1

你不會在你的線程中分配工作。 嘗試通過每個線程哪個任務應該做

這裏就是你們的榜樣 - 改變:

import os, threading 

def loop(): 
    for x in range(800): 
     inizialize(x).start() 

class inizialize(threading.Thread): 

    def __init__(self, x): 
     threading.Thread.__init__(self) 
     self.x = x 

    def run(self): 
     self.program() 

    def program(self): 

     z = self.x #each thread starts with a different number 
     path = ("cheese.%s/" % (z)) 
     if not os.path.isdir(path): 
      return 
     filelist = os.listdir(path) 
     print (path) 
     for x in filelist: 
      try: 
       with open(path + x, "r", encoding="ascii") as y: 
        for line in y: 
         if "firefox" in line: 
          print ("Found in %s !" % (x)) 
          exit (1) 
      except: 
       pass 

loop() 
+0

它的作品!但請你,因爲我是新手,你能否請添加更多評論,以便我更好地理解你發佈的代碼?我真的很感激它..例如我沒有得到什麼是第一個功能的用法(__init__) – Sperly1987

+0

http://stackoverflow.com/questions/8609153/why-do-we-use-init-in- python-classes –

+0

不,它不工作......系統顯示「在blabla中找到」,但如果我檢入該文件,則沒有關鍵字。 – Sperly1987