2014-06-23 2 views
1

현재 여러 사이트의 데이터를 스크랩하고 있습니다. 스크래퍼 코드는 모듈 (x, y, z, a, b)에 저장됩니다.다중 처리 프로그램 - 병렬로 실행되지 않음

여기서 x.dump는 파일을 사용하여 스크랩 한 데이터를 저장하는 기능입니다. 덤프 함수는 'input'이라는 단일 인수를 사용합니다. 주 : 모든 덤프 기능이 동일하지 않습니다.

각 덤프 기능을 병렬로 실행하려고합니다. 다음 코드는 정상적으로 실행됩니다. 그러나 나는 그것이 여전히 연속 된 순서 x와 y를 따르는 것으로 나타났습니다 ... 실행을 위해서.

문제를 해결하는 올바른 방법입니까?

멀티 스레딩과 멀티 프로세싱은 병렬 프로그래밍의 유일한 기본 방법입니까? run()는 작업 자체를 구현하는 방법이기 때문이다

from multiprocessing import Process 

import x.x as x 
import y.y as y 
import z.z as z 
import a.a as a 
import b.b as b 

input = "" 

f_list = [x.dump, y.dump, z.dump, a.dump, b.dump] 
processes = [] 

for function in f_list: 
     processes.append(Process(target=function, args=(input,))) 

for process in processes: 
     process.run() 

for process in processes: 
     process.join() 
+0

, 당신은 풀을 사용하여 고려할 수 있습니다. 고정 된 수의 작업자 (일반적으로 CPU 코어 수)와 소비되는 작업 큐가 있습니다. – Davidmh

답변

3

는, 당신은 외부 그런에서 호출하는 의미가 아닙니다. start()으로 전화하여 새로운 프로세스를 생성 한 다음 다른 프로세스에서 run()을 호출하고 제어를 반환하므로 더 많은 작업을 수행 할 수 있습니다 (나중에 join()).

+0

감사합니다. 그게 전부였습니다. 답변 해 주셔서 감사합니다 최대한 빨리 답변을 수락하겠습니다. – Seeeccccc

0

당신은 Process.Start를 호출해야합니다() process.run하지()

시작 방법은 별도의 프로세스를 시작하고 그 과정에서 run 메소드를 실행하는 작업을 수행합니다. 당신이 과정에 많은 파일이있는 경우

Python docs

관련 문제