首页 > 解决方案 > Python:并行化嵌套的 for 循环

问题描述

我在尝试使用该multiprocessing模块时有点迷茫。我有一个简单的嵌套循环来将属性从一个对象复制到另一个对象:

        if objects:
            rb_from = obj_act.rigid_body
            # copy settings
            for o in objects:
                rb_to = o.rigid_body
                if o == obj_act:
                    continue
                for attr in self._attrs:
                    setattr(rb_to, attr, getattr(rb_from, attr))

如果不出意外,我想并行化内部循环,但我不清楚如何做到这一点。这里的大多数示例都侧重于使用 的map函数multiprocessing,但我并不真正关心 的返回值setattr,我只是希望这些调用并行执行。

标签: python

解决方案


您可能无法使用multiprocessing. (或者,它可能相当复杂。)上下文之外的变量不会在进程之间共享。但它们在线程之间。

您可以简单地使用threading和并行化复制执行。

    def copy_attributes(self, obj_act, o): 
        rb_from = obj_act.rigid_body

        rb_to = o.rigid_body
        if o == obj_act:
            return
        for attr in self._attrs:
            setattr(rb_to, attr, getattr(rb_from, attr))

    ...

            for o in objects:
                threading.Thread(
                    target=self.copy_attributes, args=(obj_act, o)
                ).start()


推荐阅读