여러 개의 print()
인디케이터가있는 일부 작업에 멀티 프로세싱을 사용하므로 cmd에서 프로세스가 시작/작동/종료 된 방법을 알 수 있습니다. 그러나 일부 작업은 더 빠르거나 느리므로 print()
순서는 혼란 스럽습니다. 과정이 끝나면 즉시 모든 print()
을 보여주는 방법을 찾아야합니다.다중 처리의 모든 print() 버퍼링 방법. 내부 및 외부 함수 처리?
간체 예 : 지금이 코드를 실행하면
from multiprocessing import Process
from time import sleep
def runner(px_id):
print('Start'+str(px_id))
if px_id > 1:
sleep(2)
elif px_id == 1:
sleep(5)
print('Middle'+str(px_id))
if px_id > 1:
sleep(2)
elif px_id == 1:
sleep(5)
print('End'+str(px_id))
if __name__ == '__main__':
px_list = [1, 2, 3]
for px in px_list:
p = Process(target=runner, args=(px,))
p.start()
, 내가 받게됩니다 :
Start2
Middle2
End2
Start3
Middle3
End3
Start1
Middle1
End1
나는 여전히 프로세스가 필요합니다
Start1
Start2
Start3
Middle2
Middle3
End2
End3
Middle1
End1
내가 좋아하는 뭔가가 필요하지만 비동기 (따라서 join()
을 사용할 수는 없음)이지만 프로세스가 끝나면 모든 print()를 인쇄하십시오. 조언을 주셔서 감사합니다 :
UPD : 기능 메시지를 버퍼링하기위한 배열을 사용하는 것은 좋은 해결책이지만 여전히 외부 기능의 버퍼링 솔루션에 대한 도움이 필요합니다. 내 말은, 다른 함수 안에 일부 함수를 사용하면 모든 print()
을 수동으로 버퍼링 할 수 없으므로 좀 더 복잡한 솔루션을 찾을 수 있습니다. :)
'while while'루프 내에 프로세스가 생성되면 내부 버퍼가 작동합니까? 문자열 변수에 '\ n +'를 추가하고 끝에 큰 문자열을 인쇄 할 수는 있지만 부 자연스럽게 보입니다. – sortas
다시 읽으십시오. 배열 아이디어가 완벽한 솔루션처럼 보입니다. – sortas
아직도 내부 기능은 어떻습니까? 내 말은, 배열 내부에 함수 메시지를 버퍼링 할 수 있지만 내부에 일부 외부 함수를 사용하면 외부 프린트를 버퍼링 할 수 없다는 것입니다. 어쩌면 좀 더 복잡한 해결책이 있을까요? :) – sortas