多处理 - 进程似乎不是并行执行

时间:2021-02-09 01:55:03

标签: python tkinter multiprocessing subprocess

我对多处理非常陌生,所以我可能会做一些非常愚蠢的事情。所以简而言之:

  • 我有一个 GUI 应用,可以在后台执行多项冗长的计算。
  • 由于它是一个 GUI 应用程序,执行所有计算的包装器方法使用 threading 来防止窗口挂起:
    def _run_calc(self):
        """
        Run data processing in a separate thread to prevent the main
        window from freezing.
        """

        t = threading.Thread(target=self._process_data)
        t.start()
  • 在此线程中,运行所有单独计算的包装器方法正在使用多处理:
    def _calculate_components(self):
        processes = []

        if self.mineralogy.get():
            self.minerals = self._get_mineralogy_components()
            miner_worker = Process(target=self.calculate_mineralogy())
            processes.append(miner_worker)
        if self.porosity.get():
            porosity_worker = Process(target=self.calculate_porosity())
            processes.append(porosity_worker)
        if self.poi.get():
            poi_worker = Process(target=self.calculate_poi())
            processes.append(poi_worker)
        if self.water_table.get():
            owt_worker = Process(target=self.calculate_owt())
            processes.append(owt_worker)

        for i in processes:
            i.start()

        for i in processes:
            i.join()

        self._add_components_to_data()
  • 现在的问题是,基于控制台输出的进程会一个接一个地执行,而不是同时执行。
  • 此外,如果不使用多处理,则对测试数据的运行需要 35 秒,而使用多处理需要 47 秒,这当然违背了整个目的。

我很确定我在这里误解了一些东西并且做错了一些事情。如何让进程并行运行?

0 个答案:

没有答案