在python中,通过exec语句为对象赋值,而通过Pool进行多处理是否安全?

2024-10-01 11:42:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一些代码,从c/cpp文件动态创建python对象类,然后通过exec()语句从解码的二进制数据动态分配它们。从快速浏览结果来看,它似乎起了作用。但我不确定这是否是一种好的做法,也不确定Python对指定相同的对象(但不同的属性)有何反应。有人知道Python中最底层发生了什么吗

谢谢大家的帮助

这里有一个简单的例子来说明我的意思


class ClassCreated:
   def__init__(self, attr1, attr2, ... attr50):
      self.attr1 = attr1
      self.attr2 = attr2
      ...

class ProcessData:
   def__init__(self):
      self.obj1 = None

   def process(self)
      from multiprocessing import Pool
      self.obj1 = ClassCreated()

      assignments = ['self.obj1.attr1=33', self....]

      p = Pool(5)
      p.map(self.exec(), assignments)

   def exec(self, statement):
      exec(statement)
      return

Example.obj1.attr1 = 33等等吗?还是有可能发生碰撞?保证每个赋值语句都是唯一的,并且不会有任何语句多次写入同一属性


Tags: 对象self属性initdef语句classstatement