LINUX.ORG.RU

Как реализовать параллельный процесс с возможностью прерывания изнутри?

 ,


1

4

Есть функция которая выполняется над набором значений. Выдаёт либо это значение (подтверждено) либо None
Нужно чтобы по набору 25 подтвержденных значений оно останавливалось и выдавало список.
Сейчас реализовано на joblib Parallel
Соответственно полный перебор всех значений. И после фильтрация None и обрезка до 25.
Если сделать последовательно простым for, то это медленно.
А если joblib, то обрабатывает только полностью и тоже выходит не очень быстро.
Возможно ли как-то сделать то, о чем я говорю или взаимоисключающие параграфы?

★★★★★

да можно, почему нет то?
например брокер отдает входные данные нескольким воркерам, получая от них результат и хранит у себя массив результатов. как только у брокера накопилось 25 успешных результатов, он перестает отдавать воркерам задания. или я тебя нетак понял?
у меня такое крутится, только воркеры там еще разнесены на разные сервера, плюс сам воркер тоже может выступать в роли брокера и переадресовывать свои задания пулу локальных воркеров (некотрые задания завязаны на работе io такчто хорошо «параллелятся»), если скорости нехватает.

genryRar ★★
()
Ответ на: комментарий от zolden

Как-то так:

allres = []
results = []
denies = []

with Pool(processes=50) as pool:
	for val in pool.imap_unordered(processInput, lst):
		if(len(results) >= 25):
			break
		allres.append(val)
		denies = [x[10:] for x in allres if x is not None and x.find('blacklist_') > -1]
		results = [x for x in allres if x is not None and x.find('blacklist_') == -1]

Qwentor ★★★★★
() автор топика

В шарпе есть CancellationToken, а в го context.Context. Я бы погуглил что-то подобное для питона.

nikolnik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.