2013-06-04 73 views
0

我有使用安全多方計算程序中的以下codesnippet:強制回調首先被執行

c = self.runtime.open(b) # open result 
c.addCallback(self.determine) 

j = self.compute(i) 
return j 

現在determine設置一個布爾要麼或真或假,這取決於價值的功能C。這個布爾值然後被函數compute使用。

我認爲回調總是先執行之前,該程序的其餘部分。不過,我從compute得到的錯誤是布爾值未定義。

如何強制執行回調之前執行compute

,因爲我是安全多方計算框架內工作,我有一個回調來工作,因爲對於c值是共享祕密。然而,這個問題也會出現在我認爲沒有祕密的情況下。該語言是Python。

determinecompute的代碼將是這樣的:

def determine(c): 
    global computeB 
    computeB = False 
    if c == 1: 
     computeB = True 
    else: 
     computeB = False 
    return c 

def compute(i): 
    if computeB: 
     do this 
    else: 
     do this 
    return result 
+0

您需要從確定調用計算,這就是回調的工作方式。 – njzk2

+0

什麼是執行你的回調呢?顯然,當你調用'compute()'的時候,你的回調還沒有執行。沒有關於你在這裏使用的框架的更多細節,它是*不可能*幫助你進一步處理。 –

+0

表達式'c == 1'返回一個布爾值;只需使用'computeB = c == 1'而不是'if' - 'else'語句。 –

回答

0

,當它被執行回調被執行。 「早日執行」沒有意義。

我想你正在處理扭曲,所以繼承人教程http://krondo.com/?page_id=1327,但它是有用的,即使理解一般的異步編程,你顯然需要。

+0

我會看看,謝謝。 – Mythio

0

我不是在異步親,但我想你想得你的第一個功能,並告訴你的日常等待它繼續之前。

yield self.runtime.open(b) # open result 

j = self.compute(i) 
return j