1

저는 파이썬 큐를 사용하여 생산자/소비자 모델을 설정했습니다. 한 프로듀서에서는 scipy.misc.imread을 사용하여 이미지를 읽습니다.scipy.misc.imread는 여러 스레드에서 실행하기에 안전합니까?

한 스레드에서 이미지를 읽는 속도가 빠르지 않습니다. 이미지 당 읽는 데 약 0.2 초 정도 걸립니다. SSD에서 약 20MB/초 독서.

파이썬의 threading 모듈을 사용하여 또 다른 동일한 스레드를 추가하려고했습니다. 그러나 scipy.misc.imread에서 보낸 시간은 약 두 배 증가하여 2 개의 스레드가 이미지를 대략 1 초만큼 빨리 읽을 수 있습니다.

내 SSD가 임의 읽기에서도 40MB/초 처리량을 처리 할 수 ​​있다고 확신합니다. dd 쓰기 테스트는 800MB/초의 쓰기 속도를 보여줍니다.

scipy.misc.imread이 스레드 중 중요한 영역으로 실행되는지 궁금합니다. 이 문제를 방지하려면 multiprocessing이 필요합니까?

+0

'scipy.misc.imread'는 PIL을 둘러싼 단순한 래퍼입니다. 이미지의 크기는 얼마나 큽니까? 어떤 형식입니까 (특히 압축되어 있습니까?). –

+0

또한 어떤 버전의 PIL을 설치 했습니까? Pillow 포크 또는 원래 PIL 라이브러리입니까? [이 커밋] (https://github.com/python-pillow/Pillow/pull/1224)까지, Pill/PIL은 이미지 디코딩 중에 GIL을 해제하지 않았습니다. 필자에게 제공 할 소스는 없지만 원본 PIL도 GIL을 릴리스하지 않는다고 생각합니다. –

+0

저는 아나콘다를 사용하고 있습니다. 멀티 프로세싱으로 첫 번째 테스트를 실행했으며 동일한 문제가없는 것 같습니다. 내 눈이 나를 속이지 않도록 몇 가지 테스트를 더해야합니다. 이미지는 각각 2MB이고, 20 이미지/초의 속도로 읽고 큐에 넣어야합니다. –

답변

0

scipy.misc.imread은 여러 스레드에서 안전하지만 각 호출이 전역 인터프리터를 잠그므로 성능에 멀티 스레드가 도움이되지 않습니다.

이것은 다중 처리에서 잘 작동하며 예상치 못한 문제가 없습니다.