[PYTHON] Spyder의 간단한 Python 다중 처리 기능이 결과를 출력하지 않습니다.
PYTHONSpyder의 간단한 Python 다중 처리 기능이 결과를 출력하지 않습니다.
여기에 내가 실행하고 테스트하려고하는이 아주 간단한 함수가 있습니다. 그러나 아무 것도 출력하지 않으며 오류도 없습니다. 코드를 여러 번 확인했지만 오류가 없습니다.
나는 일자리를 인쇄했고 여기에 내가 가진 것이있다.
[<Process(Process-12, stopped[1])>,
<Process(Process-13, stopped[1])>,
<Process(Process-14, stopped[1])>,
<Process(Process-15, stopped[1])>,
<Process(Process-16, stopped[1])>]
코드는 다음과 같습니다.
import multiprocessing
def worker(num):
print "worker ", num
return
jobs = []
for i in range(5):
p = multiprocessing.Process(target = worker, args = (i,))
jobs.append(p)
p.start()
여기 내가 기대하는 결과가 있지만 아무 것도 출력하지 않습니다.
Worker: 0
Worker: 1
Worker: 2
Worker: 3
Worker: 4
해결법
-
==============================
1.OP는 Windows뿐만 아니라 Spyder도 사용한다는 의견이 나왔습니다. Spyder가 stdout을 리디렉션하고 Windows에서 분기를 지원하지 않으므로 새 하위 프로세스가 Spyder 콘솔에 인쇄되지 않습니다. 이는 단순히 새로운 자식 프로세스의 표준 출력이 Python의 바닐라 stdout이며 sys .__ stdout__에서도 찾을 수 있기 때문입니다.
OP는 Windows뿐만 아니라 Spyder도 사용한다는 의견이 나왔습니다. Spyder가 stdout을 리디렉션하고 Windows에서 분기를 지원하지 않으므로 새 하위 프로세스가 Spyder 콘솔에 인쇄되지 않습니다. 이는 단순히 새로운 자식 프로세스의 표준 출력이 Python의 바닐라 stdout이며 sys .__ stdout__에서도 찾을 수 있기 때문입니다.
두 가지 대안이 있습니다.
풀을 사용한 다중 처리 예제 :
import multiprocessing def worker(num): """Returns the string of interest""" return "worker %d" % num def main(): pool = multiprocessing.Pool(4) results = pool.map(worker, range(10)) pool.close() pool.join() for result in results: # prints the result string in the main process print(result) if __name__ == '__main__': # Better protect your main function when you use multiprocessing main()
어떤 인쇄 (메인 프로세스에서)
worker 0 worker 1 worker 2 worker 3 worker 4 worker 5 worker 6 worker 7 worker 8 worker 9
편집 :지도 함수가 끝날 때까지 기다리지 않으려면 imap_unordered를 사용하고 명령 순서를 약간 변경하여 즉시 결과를 인쇄 할 수 있습니다.
def main(): pool = multiprocessing.Pool(4) results = pool.imap_unordered(worker, range(10)) for result in results: # prints the result string in the main process as soon as say are ready # but results are now no longer in order! print(result) # The pool should join after printing all results pool.close() pool.join()
from https://stackoverflow.com/questions/29629103/simple-python-multiprocessing-function-in-spyder-doesnt-output-results by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 헤더가 반복되지 않고 여러 개의 CSV 파일 병합 (Python 사용) [닫힘] (0) | 2018.10.28 |
---|---|
[PYTHON] 여러 웹 사이트에 하나의 Scrapy 스파이더 사용 (0) | 2018.10.28 |
[PYTHON] paramiko ssh exec_command에서 지속적으로 출력을 얻습니다. (0) | 2018.10.28 |
[PYTHON] Postgres - 누락 된 데이터가 0 인 행을 반환하는 방법? (0) | 2018.10.28 |
[PYTHON] 이미 페어링 된 것을 포함하여 리눅스에서 가까운 / 발견 가능한 블루투스 장치를 나열합니다. (0) | 2018.10.28 |