Как я уже сказал, я не думаю, что вы можете выйти из задачи, выполняющей основной сценарий, из рабочего процесса.
Вы точно не объяснили , почему вы хотите сделатьэто, так что этот ответ является предположением, но, возможно, поднятие пользовательского Exception
и обработка его в явном выражении except
, как показано ниже, будет приемлемым способом обойти ограничение.
import multiprocessing
import sys
class WorkerStopException(Exception):
pass
def worker(n):
if n == 4:
raise WorkerStopException()
return n*2
def caller(mylist, n=1):
n_cores = n if n > 1 else multiprocessing.cpu_count()
print(n_cores)
pool = multiprocessing.Pool(processes=n_cores)
try:
result = pool.map(worker, mylist)
except WorkerStopException:
sys.exit("wrong number")
pool.close()
pool.join()
return result
if __name__ == '__main__':
l = [2, 3, 60, 4]
myresult = caller(l, 4)
Выводится выводпри запуске:
4
wrong number
(4
- это количество процессоров в моей системе.)