2014-01-20 3 views
0

내가 16 개 프로세서 우분투 서버에서 병렬로 어떤 작업을 실행 (위) 스크립트를 사용하고, 그것은 실제로 작동하지만 난 그것에 대해 몇 가지 질문이 있습니다이 병렬 작업 코드는 어떻게 파이썬에서 작동합니까?

  • 코드가 실제로 무엇을을 ?
  • 더 많은 직원이 스크립트를 빠르게 실행하지만 직원의 한도는 무엇입니까? 나는 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

먼저, 메인 함수에서 시작 :

  1. 그것은 CSV 파일에서 2000 정수 형 전화 번호의 NumPy와 배열을 생성합니다.
  2. 그런 다음 일부 변수 및 목록을 만듭니다.
  3. 다음으로 CSV 파일에서 추출한 모든 전화 번호가 포함 된 대기열을 만듭니다.
  4. 다음으로 16 명의 직원에 대해 각각에 대해 DB 연결을 만들고 처리 인수를 설정하고 프로세스를 시작합니다 모든 작업자 프로세서 용.

희망 사항은 코드를 이해하는 데 도움이됩니다. 사실, 당신이 시도하고있는 멀티 스레딩의 종류이며 병렬 처리처럼 행동합니다. 따라서 사용하는 전화 번호가 많을수록 더 빨리됩니다. 내 상식처럼 2000 프로세서를 사용할 수 있어야합니다. 그 후 그것은 주인 - 노예 철학으로는 의미가 없습니다. 또한 병렬 처리는 유휴 프로세서/작업자 수를 최소화 할 것을 제안합니다. 2000 명 이상의 근로자가있는 경우 유휴 근로자가 생겨 성과가 감소합니다. 마지막으로, 병렬 처리 개선은 이러한 종류의 이데올로기를 향상시킬 필요가 있습니다.

희망이 있습니다. 건배!

관련 문제