8 개의 CPU 코어와 200 개의 작업이 있습니다. 각 작업은 분리되어 있습니다. 결과를 기다리거나 공유 할 필요가 없습니다. 8 가지 작업/프로세스를 한 번에 (최대) 실행할 수있는 방법을 찾고 있는데 그 중 하나가 완료되었습니다. 나머지 작업은 자동 시작 프로세스입니다.파이썬 다중 처리 예약 작업
자식 프로세스가 완료된시기를 알고 새 자식 프로세스를 시작하는 방법. 우선 프로세스 (다중 처리)를 사용하려고하는데 알아 내기가 어렵습니다. 그런 다음 동적 인스턴스화를 사용해야하는 이유로 피클 문제로 풀과 얼굴을 사용하려고합니다.
편집 : 수 없습니다 피클 : 내장 .instancemethod이
실패 속성 조회하지만 풀
class Collectorparallel():
def fire(self,obj):
collectorController = Collectorcontroller()
collectorController.crawlTask(obj)
def start(self):
log_to_stderr(logging.DEBUG)
pluginObjectList = []
for pluginName in self.settingModel.getAllCollectorName():
name = pluginName.capitalize()
#Get plugin class and instanitiate object
module = __import__('plugins.'+pluginName,fromlist=[name])
pluginClass = getattr(module,name)
pluginObject = pluginClass()
pluginObjectList.append(pluginObject)
pool = Pool(8)
jobs = pool.map(self.fire,pluginObjectList)
pool.close()
print pluginObjectList
pluginObjectList 가지고
[<plugins.name1.Name1 instance at 0x1f54290>, <plugins.name2.Name2 instance at 0x1f54f38>]
PicklingError 같은 내 코드를 추가 처리 버전은 정상적으로 작동합니다.
해결책은'multiprocessing.Pool'을 사용하는 것입니다. 창 살 클리핑 문제를 해결하는 방법은 코드에 따라 다릅니다. ** 일부 코드 게시 ** 테스트 용으로 사용할 수있는 * small * 및 * self-contained * 예제를 작성할 수 있고이를 사용 사례를 명확하게 보여줄 수 있다면. – Bakuriu
@Bakuriu 내 코드를 추가했습니다. – Runicer