Python 다 중 프로 세 스 가 같은 파일 을 쓰 는 방법
2449 단어 Python다 중 프로 세 스기록 하 다문건
다 중 스 레 드 가 쓸모 가 없 는 이상 다 중 프로 세 스 를 사용 하여 처리 할 수 있 습 니 다.다 중 프로 세 스 는 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 다 중 프로 세 스 가 같은 파일 을 쓰 는 방법 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.