2014-01-20 84 views
0

我一直在使用一個腳本(上圖)並行運行在16個處理器的Ubuntu的服務器某項任務,它的實際工作,但我有一個關於它的幾個問題:這個並行任務代碼如何在Python中工作?

  • 什麼代碼實際上做?
  • 隨着越來越多的工人設置腳本運行得更快,但工人的限制是什麼?我已經跑了100個。
  • 怎麼可能改進呢?

    #!/usr/bin/env python 
    from multiprocessing import Process, Queue 
    from executable import run_model 
    from database import DB 
    import numpy as np 
    
    def worker(work_queue, db_conection): 
        try: 
         for phone in iter(work_queue.get, 'STOP'): 
          registers_per_number = retrieve_CDRs(phone, db_conection) 
          run_model(np.array(registers_per_number), db_conection) 
          #print("The phone %s was already run" % (phone)) 
    
        except Exception: 
         pass 
    
        return True 
    
    
    def retrieve_CDRs(phone, db_conection): 
        return db_conection.retrieve_data_by_person(phone) 
    
    
    def main(): 
        phone_numbers = np.genfromtxt("../listado.csv", dtype="int")[:2000] 
    
        workers = 16 
        work_queue = Queue() 
        processes = [] 
        #print("Process started with %s" % (workers)) 
    
        for phone in phone_numbers: 
         work_queue.put(phone) 
         #print("Phone %s put at the queue" % (phone)) 
        #print("The queue %s" % (work_queue)) 
    
        for w in xrange(workers): 
         #print("The worker %s" % (w)) 
         # new conection to data base 
         db_conection = DB() 
         p = Process(target=worker, args=(work_queue, db_conection)) 
    
         p.start() 
         #print("Process %s started" % (p)) 
         processes.append(p) 
         work_queue.put('STOP') 
    
        for p in processes: 
         p.join() 
    
    
    if __name__ == '__main__': 
        main() 
    

    乾杯!

回答

0

首先,從main函數開始:

  1. 它創造了2000整數類型的電話號碼從CSV文件的numpy的陣列。
  2. 然後創建一些變量和列表。
  3. 接下來,您要創建一個隊列,你從CSV提取的文件
  4. 接下來的所有電話號碼,爲16名工人,你正在爲每一個數據庫連接,建立加工參數,並啓動該進程爲所有的工人處理器。

希望能幫助你理解代碼。實際上,它是一種你正在嘗試的多線程,它的行爲就像並行處理一樣。所以,你使用的數字越多,速度就越快。按照我的常識說,你應該可以使用2000個處理器。之後,它作爲主從哲學是沒有意義的。另外,並行處理建議您儘量減少空閒處理器/工作者的數量。如果你有超過2000名工人,那麼你將有一些閒散的工人,這會降低你的表現。最後,改進並行處理需要改進這種意識形態。

希望有所幫助。乾杯!

相關問題