我正在工作在多線程環境中,並且看起來像這樣一類(含過量噪聲去除):classmethods線程安全嗎?
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
在同一時間,或者子類可能會嘗試在這些函數之一中使用cls
做一些愚蠢的事情。我可以使用staticmethod
而不是classmethod
,但調用do_thing
會變得複雜得多,特別是如果一個子類重新實現其中一個而不是另一個。所以我的問題是這樣的:上面的類是線程安全的,還是存在使用類方法的潛在問題?
感謝您的回答。那麼就簡單地調用'cls.do_thing'危險沒有鎖?直覺上我不這麼認爲,但我沒有太多的多線程經驗。 – aquavitae
依賴於'thing'' do_thing()'做... – shx2