У меня есть 8 ядер процессора и 200 задач. Каждая задача изолирована. Нет необходимости ждать или делиться результатами. Я ищу способ запуска 8 задач/процессов за раз (Максимум) и когда один из них закончен. Остальная задача будет автоматически запускаться.задача планирования многопроцессорности python
Как узнать, когда был выполнен дочерний процесс, и начать новый дочерний процесс. Сначала я пытаюсь использовать процесс (многопроцессорность), и его сложно понять. Затем я пытаюсь использовать пул и лицо с проблемой рассола, потому что мне нужно использовать динамический экземпляр.
Edited: Добавление мой код Бассейн
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: Может не рассол: атрибут поиска .instancemethod встроенный не удалось
но Версия процесса работает нормально
Решение заключается в использовании 'multiprocessing.Pool'. Как решить проблему окна травления * полностью * зависит от кода. ** Оставьте какой-нибудь код! ** Если вы можете написать * маленький * и * автономный * пример, который мы можем использовать для тестирования и который четко показывает ваш прецедент. – Bakuriu
@Bakuriu Я добавил свой код – Runicer