2016-10-04 2 views
0

약 4 개의 입력 텍스트 파일을 읽고이를 모두 하나의 개별 파일에 쓰고 싶습니다. 두 개의 스레드를 사용하므로 더 빠르게 실행됩니다!
여기에 내 질문과 파이썬의 코드입니다 :

- 각 스레드는 "writeInFile"함수 안에 "lines"과 같은 변수의 버전을 가지고 있습니까?

2 - Tutorialspoint에서 코드의 일부를 복사했기 때문에 마지막 줄에 "while 1 : pass"가 무엇인지 이해하지 못합니다. 설명 할 수 있니? http://www.tutorialspoint.com/python/python_multithreading.htm

3 - 스레드에 대한 지연 시간은 중요합니까?

4 약 400 개의 입력 텍스트 파일이 있고 각각의 파일을 별도의 파일에 작성하기 전에 몇 가지 작업을 수행하려는 경우 몇 개의 스레드를 사용할 수 있습니까?

5- 스레드를 10 개 사용한다고 가정하면 다른 폴더 (각각 40 개의 입력 텍스트 파일이있는 10 개의 폴더)에 입력하는 것이 더 좋으며 각 스레드는 하나의 폴더를 호출하거나 아래 코드에서 이미 수행 한 것을 사용합니다. 이전에 다른 스레드에서 읽지 않은 경우 각 스레드가 400 입력 텍스트 파일 중 하나를 읽도록 요청 했습니까? 파이썬에서 여러 스레드로 하나의 메소드를 호출하십시오.

processedFiles=[] # this list to check which file in the folder has already been read by one thread so the other thread don't read it 
 

 
#Function run by the threads 
 
def writeInFile(threadName, delay): 
 
    for file in glob.glob("*.txt"): 
 

 
     if file not in processedFiles: 
 
     processedFiles.append(file) 
 
     f = open(file,"r") 
 
     lines = f.readlines() 
 
     f.close() 
 

 
     time.sleep(delay) 
 
     #open the file to write in 
 
     f = open('myfile','a') 
 
     f.write("%s \n" %lines) 
 
     f.close() 
 
     print "%s: %s" % (threadName, time.ctime(time.time())) 
 

 

 

 
# Create two threads as follows 
 
try: 
 
    f = open('myfile', 'r+') 
 
    f.truncate() 
 

 
    start = timeit.default_timer() 
 

 
    thread.start_new_thread(writeInFile, ("Thread-1", 0,)) 
 
    thread.start_new_thread(writeInFile, ("Thread-2", 0,)) 
 
    stop = timeit.default_timer() 
 

 
    print stop - start 
 

 
except: 
 
    print "Error: unable to start thread" 
 

 

 
while 1: 
 
    pass


답변

0
  1. 예. 각 로컬 변수는 스레드의 스택에 있으며 스레드간에 공유되지 않습니다.
  2. 이 루프를 사용하면 부모 스레드가 각 자식 스레드가 프로그램 종료 전에 완료되고 종료 될 때까지 대기 할 수 있습니다. 이것을 처리하기 위해 사용해야하는 실제 구문은 while 루프가 아닌 join입니다. what is the use of join() in python threading을 참조하십시오.
  3. 실제로, 스레드가 공통 파일 세트에 쓰는 경우 (예 : 스레드 1과 스레드 2가 모두 같은 파일을 읽고 쓰는 경우). 하드웨어, 파일의 크기 및 쓰려고하는 데이터의 양에 따라 지연이 다르기 때문에 사용자의 프로그램 응답 속도가 느려질 수 있습니다. 가장 좋은 방법은 간단한 값으로 시작하여 프로그램이 실제 환경에서 작동하는 것을 보면서 조정하는 것입니다.
  4. 원하는만큼 많은 스레드를 기술적으로 사용할 수 있지만 일반적으로 CPU 당 코어 당 스레드 1 개에 비해 성능상의 이점은 없습니다.
  5. 다른 폴더는 단지 400 개의 파일만큼 중요하지 않습니다. 4,000,000 개의 파일에 대해 이야기하고 있다면, 해당 디렉토리에서 ls를 수행하고자 할 때 인스턴스에 대해 중요 할 수 있습니다. 성능에 중요한 것은 각 스레드가 자체 파일에서 작업하는지 또는 두 개 이상의 스레드가 동일한 파일에서 작동하는지 여부입니다.

일반의 생각 : 그것은 더 진보 된 아키텍처 인 반면, 프로덕션 환경 http://www.celeryproject.org/에/작업의 이러한 유형의 사용 셀러리를 배우려고 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. –

관련 문제