Продолжайте работу ThreadPoolExecutor после того, как основная функция вернется - PullRequest
0 голосов
/ 02 марта 2019

ранее у меня была функция, которую можно упростить как:

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 не работает, как ожидалось?

...