2017-08-01 148 views
1

我在調用全局級聲明的套接字功能時遇到問題。從功能內訪問全局套接字時遇到問題

from nanomsg import Socket, PAIR, PUB 

s2 = Socket(PAIR) 
s2.connect('tcp://127.0.0.1:49234') 
s2.send(b'connect') 

def myfunc(): 
    global s2 
    s2.send(b'Got here!') 

myfunc() 
print('closing socket') 
s2.close() 

在上面的例子中myfunc()發送的數據永遠不會獲取到接收插座。我知道接收套接字的工作原理是收到全局級的.send()

- 編 -

只是想補充一點,我的實際應用程序是一個自定義的Alexa技能的燒瓶中,要求網絡服務,我已經驗證myfunc()獲取調用通過激活相應的Alexa自定義的技術意圖。

+0

實際上你是否在任何地方調用myfunc()? – kdopen

+0

是的,我的實際應用程序是一個針對alexa技能的問題Web服務,我已驗證「myfunc」實際上正在調用。 –

+1

嗯...只是發現上面的代碼工作,如果我這樣做是一個獨立的腳本。然而,當我嘗試用瓶子來做同樣的事情時,請求web服務對s2.send()的調用掛在由於觸發相應的Alexa自定義技能意圖而被調用的函數中。 –

回答

1

您可以檢查一個小的time.sleep(0.1)是否有幫助。連接需要一段時間,並且套接字可能沒有爲.send()馬上準備好。

s2 = Socket(PAIR) 
    s2.connect('tcp://127.0.0.1:49234') 
    time.sleep(0.2) 
    s2.send(b'connect') 
+1

在所有應有的尊重下,這並不是O/P問題+他已經證實,即使在其他'.send()'做過的情況下,不會發生預期的結果(相反,問題有助於解決問題)。 – user3666197