파이썬에서 병렬 처리를 배우고 있으며 다음 프로그램의 실행 흐름과 관련하여 몇 가지 구체적인 의문점이 있습니다. 이 프로그램에서는 프로세스에 따라 목록을 두 부분으로 나눕니다. 내 목표는 하나의 프로세스가 목록의 한 부분을 차지하고 다른 프로세스가 다른 부분을 차지하는 곳에서 두 번 병렬로 add 함수를 실행하는 것입니다.프로세스 흐름을 파이썬에서 병렬 처리
import multiprocessing as mp
x = [1,2,3,4]
print('hello')
def add(flag, q_f):
global x
if flag == 1:
dl = x[0:2]
elif flag == 2:
dl = x[2:4]
else:
dl = x
x = [i+2 for i in dl]
print('flag = %d'%flag)
print('1')
print('2')
print(x)
q_f.put(x)
print('Above main')
if __name__ == '__main__':
ctx = mp.get_context('spawn')
print('inside main')
q = ctx.Queue()
jobs = []
for i in range(2):
p = mp.Process(target = add, args = (i+1, q))
jobs.append(p)
for j in jobs:
j.start()
for j in jobs:
j.join()
print('completed')
print(q.get())
print(q.get())
print('outside main')
내가 가진 출력은
hello
Above main
outside main
flag = 1
1
2
[3, 4]
hello
Above main
outside main
flag = 2
1
2
[5, 6]
hello
Above main
inside main
completed
[3, 4]
[5, 6]
outside main
내 질문이 출력에서
1
을)하다, 우리는 다른, 하나 개의 프로세스가 먼저 실행지고 있음을 볼 수 있습니다. 프로그램이 병렬 처리를 위해 실제로 여러 개의 프로세서를 사용하고 있습니까? 그렇지 않다면 어떻게 병렬 처리 할 수 있습니까? 평행하게 처리했다면, print ('1') print ('2')는 무작위로 실행되어야합니다.2) 어떤 프로세서가 프로그램을 실행하고 있는지 프로그래밍 방식으로 확인할 수 있습니까?
3) 메인 (안녕하세요, 메인 위, 메인 외부)의 인쇄 문이 3 번 실행되는 이유는 무엇입니까?
4) 프로그램 실행의 흐름은 무엇입니까?
1) 독립적으로 실행 (첫번째 과정은 확실하지 않음) 2) 두 번째 시작하기 전에 완료됩니다. 3) 코드를 실행할 때 인쇄 명령문이 추가로 실행되지 않습니다. –
@JohnAnderson이 동작은 Windows 관련 –