2014-09-26 8 views
0

여러 프로세스를 병렬로 실행 중이고 각 프로세스가 동일한 파일을 병렬로 읽습니다. 프로세스 수를 15 개 이상으로 늘리면 일부 프로세스가 파일의 손상된 버전을 보는 것처럼 보입니다. 그러한 시나리오를 처리하기 위해 권장되는 방법은 무엇입니까?여러 프로세스에서 병렬로 파일 읽기

자세한 내용 : 병렬로 읽히는 파일은 실제로 perl 스크립트입니다. 다중 작업은 파이썬 프로세스이며, 각각은 다른 입력 매개 변수로이 perl 스크립트를 독립적으로 시작합니다. 작업 수가 증가하면 이러한 작업 중 일부는 perl 스크립트의 구문이 잘못되었습니다 (사실이 아님) 오류가 발생합니다. 따라서 필자는 이러한 작업 중 일부가 손상된 Perl 스크립트를 읽은 것으로 의심합니다.

저는 32core 머신에서이 모든 것을 실행하고 있습니다.

+0

"프로세스 중 일부에서 손상된 파일 버전이있는 것 같습니다."- 2 가지 : (1) 동기화 논리에 버그가있을 수 있습니다. (2) 여러 프로세스가있는 파일을 읽을 가능성이 거의 없으면 속도가 빨라집니다. 속도가 느려질 수 있습니다. –

+0

동기화 로직이 전혀 없습니다. 제가 말했듯이,이 파일은 병렬로 실행되는 펄 스크립트입니다. 그래, 각 펄 프로세스가 독립적 인 데이터 세트에서 작업하기 때문에 더 빠를 것이다 – slash90

+0

"동기화 로직이 없다"- 문제가있다! (나는 많이 생각했다). 내가 다시 한 말을 읽어라. 나는 아마도 당신의 복잡한 프로세싱이 더 빠르지 않을 것이라고 말하지 않았다. "여러 프로세스를 가진 파일을 읽는 것이 매우 빠를 것입니다. (즉, 파일 읽기 부분)" –

답변

-1

프로세스가 파일에도 쓰는 경우 전역 적 뮤텍스와 같은 일부 동기화를 적용해야합니다.

계속되는 비동기 쓰기가 없다면 읽는 동안 손상이 발생하지 않을 것입니다. "r"액세스 권한으로 파일을여시겠습니까? 그래도 문제가 발생하면 읽기 버퍼 크기를 줄이는 것이 좋습니다. 또는 파일 액세스를 위해 기본 Win32 API를 호출하십시오.

행운을 빈다.

+0

파일을 기록하지 않습니다. 파일은 myScript.pl이며 각 프로세스 내에서 'perl myScript.pl'로 호출됩니다. 약 20 개의 프로세스가 있습니다. 당신이 말하는 의미에서 '읽는'것이 아닙니다. – slash90