我正在开发一个在多线程环境下操作的类,它看起来像这样(已删除冗余噪音):
class B:
@classmethod
def apply(cls, item):
cls.do_thing(item)
@classmethod
def do_thing(cls, item)
'do something to item'
def run(self):
pool = multiprocessing.Pool()
for list_of_items in self.data_groups:
pool.map(list_of_items, self.apply)
我的关注点是两个线程可能同时调用 apply 或 do_thing,或者一个子类可能在其中一个函数中尝试做一些愚蠢的事情。我可以使用 staticmethod 代替 classmethod,但调用 do_thing 就会变得更加复杂,特别是如果子类重新实现其中一个而不是另一个。因此,我的问题是:上述类是否是线程安全的,或者使用 classmethod 存在潜在问题?
cls.do_thing
会有危险吗?直觉上我觉得不会,但是我对多线程没有太多经验。 - aquavitae