代码之家  ›  专栏  ›  技术社区  ›  Stefan Papp

ProcessPoolExecutor卡住,ThreadPool Executor没有

  •  0
  • Stefan Papp  · 技术社区  · 6 年前

    我有一个应用程序可以让我选择是使用线程还是进程:

    def _get_future(self, workers):
            if self.config == "threadpool":
                self.logger.debug("using thread pools")
                executor = ThreadPoolExecutor(max_workers=workers)
            else:
                self.logger.debug("using process pools")
                executor = ProcessPoolExecutor(max_workers=workers)
            return executor
    

    self.executor = self._get_future()
    for component in components:
        self.logger.debug("submitting {} to future ".format(component))
        self.future_components.append(self.executor.submit
                                                  (self._send_component, component))
    
        # Wait for all tasks to finish
    while self.future_components:
        self.future_components.pop().result()
    

    当我使用进程时,我的应用程序就会卡住。从未调用\u send \u component方法。当我用线的时候一切都很好。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Stefan Papp    6 年前

    问题是命令式方法,这是函数式方法的用例。

    self.\u send\u component是类的成员函数。分离的进程意味着没有共享变量的联合内存。

    解决方案是重写代码,使发送组件是一个静态方法。