synchronized
函數keras_tuner.synchronized(func, )
此裝飾器用於同步對 Oracle
函數的多執行緒呼叫。
在平行調校中,可能會有來自多個執行緒對 Oracle
方法(例如 create_trial()
、update_trial()
和 end_trial()
)的同時 gRPC 呼叫。為了避免同時寫入資料,請使用 @synchronized
來確保呼叫是同步的,這只允許一次執行一個呼叫。
對不同 Oracle
物件的同時呼叫不會互相阻塞。對同一個 Oracle
物件的相同或不同函數的同時呼叫會互相阻塞。
您可以裝飾一個子類別函數,該函數會覆寫基底類別中已經被裝飾的函數,而無需擔心會造成死鎖。但是,此裝飾器僅支援類別內的方法,而不能應用於獨立函數。
您不需要裝飾 Oracle.populate_space()
,它只會被 Oracle.create_trial()
呼叫,而 Oracle.create_trial()
已經被裝飾。
範例
class MyOracle(keras_tuner.Oracle):
@keras_tuner.synchronized
def create_trial(self, tuner_id):
super().create_trial(tuner_id)
...
@keras_tuner.synchronized
def update_trial(self, trial_id, metrics, step=0):
super().update_trial(trial_id, metrics, step)
...
@keras_tuner.synchronized
def end_trial(self, trial):
super().end_trial(trial)
...