ранее у меня была функция, которую можно упростить как:
Class A():
def _run(id):
# do_something
return
def run():
for id in id_list:
proc = Process(
target=self._run,
args=(id),
)
proc.start()
return
Подпроцессы, созданные в run()
, будут продолжать работать даже после возврата из функции run()
, и это именно то, что я хочу.
Теперь мне предложили использовать concurrent.futures
.Поэтому я немного модифицирую свой код:
def run():
executor = ThreadPoolExecutor(max_workers=len(id_list))
for id in id_list:
executor.submit(self._launch, (id))
return
Но кажется, что потоки не работают вообще.Это потому, что исполнитель очищается после возврата run()
?Я также пытался использовать ProcessPoolExecutor
, но затем я получил TypeError: can't pickle _thread.lock objects
.
Может кто-нибудь помочь мне понять, почему ThreadPoolExecutor
не работает, как ожидалось?