내가하려고하는 것이 올바른 방법이지만 확실하지 않은 경우 여기에 있습니다. 내 프로그램이 고도로 병렬화되어 있어야하므로 2-3 개의 프로세스와 각 프로세스를 만들 수 있다고 생각했습니다. 2-3 스레드를 가질 수 있습니다.멀티 스레드와 결합 된 파이썬 멀티 프로세싱
1) 가능합니까? 2) 거기에 어떤 점이 있습니까? 3) 이것은 내 코드이지만 프로세스에 참여하려고하면 중단됩니다.
PQ = multiprocessing.Queue()
[...]
def node(self, files, PQ):
l1, l2 = self.splitList(files)
p1 = multiprocessing.Process(target=self.filePro, args=(l1,PQ,))
p2 = multiprocessing.Process(target=self.filePro, args=(l2,PQ,))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()
p1.join() # HANGS HERE
p2.join()
while 1:
if PQ.empty():
break
else:
print(PQ.get())
PQ.join()
def filePro(self,lst,PQ):
TQ = queue.Queue()
l1, l2 = self.splitList(lst)
t1 = threading.Thread(target=self.fileThr, args=('a',l1,TQ,))
t2 = threading.Thread(target=self.fileThr, args=('b',l2,TQ,))
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()
t1.join()
t2.join()
while 1:
if TQ.empty():
break
else:
PQ.put(TQ.get())
TQ.task_done()
TQ.join()
def fileThr(self,id,lst,TQ):
while lst:
tmp_path = lst.pop()
if (not tmp_path[1]):
continue
for item in tmp_path[1]:
TQ.put(1)
TQ.join()
CPU 사용을 극대화해야 할 때 프로세스를 사용하고 디스크 액세스, 네트워크 등의 작업을 차단할 때 스레드를 사용합니다. 많은 파일을 다운로드하는 스크립트가 있으면 스레드 풀을 만들어 사용합니다 . CPU가 최고가되는 분산 계산이 있다면 프로세스 풀을 사용할 것입니다. –
코드를 디버그하기를 원하면 [최소, 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 필요합니다. – abarnert