Python 다 중 프로 세 스 가 같은 파일 을 쓰 는 방법

최근 python 의 정규 표현 식 으로 텍스트 데 이 터 를 처 리 했 습 니 다.결 과 를 파일 에 써 야 하지만 파일 이 크기 때문에 실행 하 는 데 시간 이 오래 걸 립 니 다.그러나 작업 관리 자 를 켜 보 니 CPU 가 25%밖 에 차지 하지 않 았 습 니 다.인터넷 에서 이 유 를 찾 아 보 니 GIL 이라는 존재 로 인해 Python 은 같은 시간 에 하나의 스 레 드 만 실행 할 수 있 기 때문에 하나의 CPU 만 점용 했 습 니 다.제 컴퓨터 는 4 핵 이기 때문에 CPU 이 용 률 은 25%입 니 다.
다 중 스 레 드 가 쓸모 가 없 는 이상 다 중 프로 세 스 를 사용 하여 처리 할 수 있 습 니 다.다 중 프로 세 스 는 GIL 의 영향 을 받 지 않 을 수 있 기 때 문 입 니 다.Python 은 multiprocessing 의 다 중 프로 세 스 라 이브 러 리 를 제공 합 니 다.그러나 다 중 프로 세 스 에 도 문제 가 있 습 니 다.예 를 들 어 프로 세 스 가 같은 파일 을 써 야 한다 면 여러 프로 세 스 가 자원 을 다 투 는 문제 가 발생 합 니 다.해결 하지 않 으 면 파일 의 내용 순 서 를 복잡 하 게 만 들 수 있 습 니 다.이것 은 자물쇠 와 관련 이 있어 야 합 니 다.그러나 자 물 쇠 를 추가 하면 프로그램의 실행 속도 가 떨 어 질 수 있 습 니 다.그리고 프로 세 스 가 여러 곳 에서 파일 에 출력 해 야 한다 면 이 코드 들 을 모두 잠 그 는 것 도 좋 지 않 습 니 다.만약 에 잠 그 면 단일 프로 세 스 와 무슨 차이 가 있 습 니까?파일 에 대한 출력 을 하나 로 통합 시 키 는 해결 방법 이 있 습 니 다.이 부분 에 자 물 쇠 를 집중 적 으로 추가 하면 문제 가 크 지 않 습 니 다.그러나 더욱 우아 한 해결 방법 은 멀 티 프로 세 싱 라 이브 러 리 의 리 셋 함수 기능 을 사용 하 는 것 이다.
구체 적 인 사고방식 은 파일 출력 을 한데 모 으 는 것 과 차이 가 많 지 않다.바로 프로 세 스 가 파일 에 써 야 할 내용 을 되 돌려 주 는 값 으로 혜 화의 되 돌려 주 는 함수 로 되 돌려 주 고 되 돌려 주 는 함 수 를 사용 하여 파일 에 내용 을 쓰 는 것 이다.이렇게 하면 windows 아래 에 또 하나의 장점 이 있 습 니 다.windows 환경 에서 python 의 다 중 프로 세 스 는 Liux 환경 에서 의 다 중 프로 세 스 와 같 지 않 습 니 다.Liux 환경 에서 의 multiprocessing 라 이브 러 리 는 fork 함 수 를 바탕 으로 부모 프로 세 스 fork 가 키 프로 세 스 를 한 후에 자신의 자원 을 전달 합 니 다.예 를 들 어 파일 핸들 을 모두 하위 프로 세 스 에 전달 합 니 다.그러나 windows 환경 에 fork 함수 가 없 기 때문에 부모 프로 세 스 에서 파일 을 열 었 다 면 하위 프로 세 스 에 기록 하면 Value Error:I/O operation on closed file 과 같은 오류 가 발생 할 수 있 습 니 다.또한 windows 환경 에서 if 를 추가 하 는 것 이 좋 습 니 다.name__ == '__main__'이러한 판단 은 발생 할 수 있 는 Runtime Error 나 잠 금 을 피한다.
다음은 코드:

from multiprocessing import Pool
import time


def mycallback(x):
  with open('123.txt', 'a+') as f:
    f.writelines(str(x))


def sayHi(num):
  return num


if __name__ == '__main__':
  e1 = time.time()
  pool = Pool()

  for i in range(10):
    pool.apply_async(sayHi, (i,), callback=mycallback)

  pool.close()
  pool.join()
  e2 = time.time()
  print float(e2 - e1)
실행 결 과 는 다음 과 같 습 니 다.
Python多进程写入同一文件
이상 의 Python 다 중 프로 세 스 가 같은 파일 을 쓰 는 방법 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기