Я думаю, что вам следует отключить пул, только если вы закончили с ним, то есть после цикла for a
, возможно, даже в предложении try...finally
.
Это будет выглядеть так:
try:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
finally:
pool.shutdown()
pool.wait()
Таким образом, pool
завершение работы
а) происходит только в том случае, если выполняется установка всего пула, и б) происходит, даже если есть исключение для чистого отключения.1012 * Если бы в пуле был менеджер контекста, это было бы еще проще.Но AFAICS, это не .В противном случае вы могли бы сделать
with pool:
for a in range(ranges + 1):
os.chdir(path + '\\' + str(workname))
os.system('mkdir ' + str(range1 + a))
os.chdir(path + '\\' + str(workname) + '\\' + str(range1 + a))
for b in range(fams + 1):
fa = str(fam1 + b)
job = DownloadJob(fa)
pool.put(job)
Но если вы хотите, вы можете сделать
from contextlib import contextmanager
@contextmanager
def shutdown_wait(pool):
try:
yield pool
finally:
pool.shutdown()
pool.wait()
...
with shutdown_wait(pool):
for a ... [as above]