2014-01-28 2 views
0

잘 작동하는 원격 시스템 파일을 읽는 코드를 작성했지만 원격 파일을 읽는 데 많은 시간이 걸립니다. 나는 읽기 능력을 향상시키고 싶다.파이썬에서 고성능으로 원격 시스템 파일을 읽는 방법을 개선하는 방법

또한 원격 시스템 파일을 읽는 데 python Threading을 사용했습니다. 또한 많은 시간이 걸립니다. 이제는 누구나 저에게 더 나은 제안을 알려주었습니다. 내가 원격 시스템의 파일을 읽기 위해이 코드를 사용했다

,이 코드에서

root_folder="\\\\192.168.1.1\\C$" 
    try: 
     use_dict={} 
     use_dict['remote']=unicode(root_folder) 
     use_dict['password']=unicode("example") 
     use_dict['username']=unicode("example") 
     win32net.NetUseAdd(None, 2, use_dict) 
     print "Network connection established" 
    except: 
     print "Network connection failed" 

    for root, dirnames, filenames in os.walk(root_folder): 
     for filename in filenames: 
      match=os.path.join(root, filename) 
      datafile = file(match) 
      for line in datafile: 
       for li in line: 
        print li 

는 45 분의 시간은 원격 시스템의 파일을 읽기 위해하고있다. 그리고 만약 내가 로컬 방식으로 동일한 파일을 읽으면 단지 5 분이 소요됩니다. 그래서 성능을 향상시킬 수는 없습니다. 읽기에 대한 성능 향상을 알려 주시기 바랍니다.

감사합니다 ...

답변

0

멀티 프로세싱을 시도 할 수 있습니다. 이 예에서 프로세스는 네트워크에서 읽고 다른 프로세스는 데이터를 인쇄하고 대기열에 의해 연결됩니다.

from multiprocessing import Process, Queue 

def readfiles(q): 

    root_folder="\\\\192.168.1.1\\C$" 
    try: 
     use_dict={} 
     use_dict['remote']=unicode(root_folder) 
     use_dict['password']=unicode("example") 
     use_dict['username']=unicode("example") 
     win32net.NetUseAdd(None, 2, use_dict) 
     print "Network connection established" 
    except: 
     print "Network connection failed" 

    for root, dirnames, filenames in os.walk(root_folder): 
     for filename in filenames: 
      match=os.path.join(root, filename) 
      datafile = file(match) 
      for line in datafile: 
       q.put(line) 
    q.close() 


if __name__ == '__main__': 
    q = Queue() 
    p = Process(target=readfiles, args=(q,)) 
    p.start() 

    while p.is_alive() or not q.empty(): 
     for li in q.get(): 
      print li