2012-10-24 6 views
0

일부 데이터를 기록한 파일이 있습니다. 데이터의 8 바이트를 말하십시오 이제 파이썬 스크립트를 사용하여 첫 번째 스레드가 실행 중이거나 일시 중단 된 동안 다른 스레드를 사용하여 첫 번째 4 바이트와 한 스레드를 사용하여 다음 4 바이트를 읽으려고합니다. 어떻게 이것을 파이썬을 사용하여 할 수 있습니까? 즉 1) thread1 실행) 파일 1 2에서 thread1 사용하는 동안 처음 4 바이트를 읽거나 thread2파이썬에서 파일을 동시에 읽을 수 있습니다.

+0

이것은 나쁜 생각처럼 들립니다. 파일에서 하나의 스레드 만 읽고 작업자에게 데이터를 전달하여 처리하는 것이 더 쉬울까요? – millimoose

답변

3

실행 두 개의 스레드를 사용하여 파일 1에서 다음 4 바이트를 읽고 개방 중단하고 두 스레드에서 개별적으로 파일을 읽고, 당신은 seek을 사용할 수 있습니다 특정 위치로 건너 뛰기

0
from multiprocessing import Process, Queue 

class MyFileWrapper: 

    def __init__(self, filePath, start, stop): 
     self.filePath = filePath 
     self.start = start 
     self.stop = stop 

    def getData(self): 
     with open(self.filePath, 'r') as f: 
      f.seek(self.start) 
      data = f.read(self.stop - self.start) 
      print data 

def worker(q): 
    myFileWrapper = q.get() 
    myFileWrapper.getData() 

if __name__ == "__main__": 

    work_queue = Queue() 

    p1 = Process(target=worker, args=(work_queue,)) 
    p1.start() 
    p2 = Process(target=worker, args=(work_queue,)) 
    p2.start() 

    work_queue.put(MyFileWrapper('C:\Users\Asus\Desktop\pytest.txt', 0, 4)) 
    work_queue.put(MyFileWrapper('C:\Users\Asus\Desktop\pytest.txt', 4, 8)) 

    work_queue.close() 
    work_queue.join_thread() 
    p1.join() 
    p2.join() 
관련 문제