이미지 경로를 가져 와서 이미지가 검은 색인지 아닌지에 따라 true 또는 false를 출력하는 python 함수가 있습니다. 같은 기계에서 여러 이미지를 처리하고 그 중 하나라도 검은 색이 아닌 경우 프로세스를 중단하고 싶습니다. 파이썬, 셀러리 등에서 멀티 프로세싱을 많이 읽었지 만 어디에서 시작해야할지 모르겠습니다.이미지 처리를위한 파이썬 다중 프로세스 실행
0
A
답변
2
나는 즉시 Pools을보고 프로세스를 쉽게 만들 것을 제안합니다. 공유 상태가 필요한 경우이 경우 검정색이 아닌 이미지가 있음을 나타내는 부울은 Managers입니다.
업데이트 : 다음은 내가 말하는 의미의 예입니다.
import multiprocessing.Manager as Manager
import multiprocessing.Pool as Pool
m = Manager()
p = Pool(processes=5)
state_info = m.dict()
state_info['image_found'] = False
def processImage(img):
# ... Process Image ...
if imageIsBlack(img):
state_info['image_found'] = True
p.terminate()
p.apply(processImage, imageList)
if state_info['image_found']:
print 'There was a black image!!'
else:
print 'No black images were found.'
0
마지막으로 나에게 적합합니다. 예 : here에서 복사했습니다. 설명을 위해 저는 _isImgNonBlack 함수와 이미지 시퀀스를 0과 1의 목록으로 대체했습니다. 여기서 0은 검은 색 이미지이고 1 개는 비 검은 색 이미지입니다.
import multiprocessing
def isImgNonBlack(result_queue, imgSeq):
for img in imgSeq:
# If a non-black is found put a result
if img==1:
result_queue.put(1)
# else put a zero as the result
result_queue.put(0)
if __name__ == '__main__':
processs = []
result_queue = multiprocessing.Queue()
nbProc = 20
# making a fake list of images with
# 10,000 0's follwed by a single 1
images = [0 for n in range(10000)]
images.append(1)
for n in range(nbProc): # start processes crawling for the result
process = multiprocessing.Process(target=isImgNonBlack, args=[result_queue, images])
process.start()
processs.append(process)
print 'Starting Process : %s' % process
result = result_queue.get() # waits until any of the proccess have `.put()` a result
for process in processs: # then kill them all off
process.terminate()
# finally print the result
print "Seq have a non black img: %s" % result
관련 문제
- 1. 파이썬 다중 프로세스 이미지 목록
- 2. 파이썬 다중 프로세스 모듈을 사용하여 다중 Gearman 프로세스 실행
- 3. 파이썬 하위 프로세스 popen 다중 명령 실행
- 4. 파이썬 다중 처리 .pool 순차적 프로세스 실행
- 5. 실행 파일을 실행하기위한 파이썬 다중 스레드 프로세스
- 6. 데이터 처리를위한 다중 프로세스 Python/Numpy 코드
- 7. 병렬 처리를위한 파이썬 다중 처리 풀
- 8. 파이썬 다중 프로세스 디버깅
- 9. 파이썬 다중 프로세스 루프
- 10. 다중 처리를위한 RPC, 디자인 문제
- 11. 다중 스레딩 프로세스 실행
- 12. 다중 프로세스 실행
- 13. 파이썬 : 다중 프로세스 풀에서 강제 num 프로세스
- 14. 실행 프로세스 숨겨진 파이썬
- 15. 파이썬 다중 스레드. 프로세스 잠금
- 16. 파이썬 다중 처리 프로세스 수
- 17. 파이썬 다중 처리; 무한한 프로세스
- 18. C++ 프로그램의 다중 프로세스 실행
- 19. 두 개의 파이썬 프로세스 실행
- 20. Mac OS X에서 앱의 다중 프로세스 실행
- 21. 병렬 처리를위한 Xvfb 다중 디스플레이?
- 22. 메인 스크립트 외부에서 파이썬 다중 프로세스 사용하기
- 23. 파이썬 다중 처리 - 워치 독 프로세스?
- 24. 이미지 처리를위한 PHP 또는 Python?
- 25. 이미지 처리를위한 번프 조작
- 26. 큰 데이터 세트로 파이썬 다중 처리를위한 chunksize를 선택하는 방법
- 27. 파이썬 다중 처리를위한 문자열을 포함하는 빠른 공유 객체
- 28. 다중 코어에서 파이썬 프로그램 실행
- 29. 파이썬 다중 처리 : 서버에서 프로세스 시작/중지
- 30. 파이썬 다중 처리. 동시에 모든 프로세스 완료
내 프로세스를 생성하는 작업 코드가 있는데 잘 작동하지만 프로세스의 함수가 False를 반환하면 종료 할 수 없습니다. – alok
풀을 사용하는 경우 종료를 사용할 수 있습니다. 방법을 알려주는 업데이트를 추가했습니다. 하위 분류 프로세스 인 경우 계산을 시작하기 전에 'image_found'가 False인지 확인하십시오. – owobeid
코드 예제를 가져 주셔서 감사하지만 예제에서 'p'가 'processImage'함수의 범위에서 변수로 인식되지 않아이 함수 내부에서 p.terminate()를 호출 할 수 없기 때문에 오류가 발생합니다. 내가 틀렸다면 나를 바로 잡아라. – alok