2014-09-24 27 views
2

我有一個Python應用程序,它有兩個主要功能。它通過UDP偵聽器線程從遠程源接收流式數據(讓我們稱之爲'傳入數據流')。Python:通過不同的類/線程內建立的TCP會話發送

還有一個TCP偵聽器線程,用於偵聽來自其他遠程源的命令。在協議中實現了各種命令,但我只實現了'發送配置數據'(它的作用,它的工作原理)和START/STOP流數據。該啓動/停止流數據應該將(編碼的)「傳入數據流」轉發給外部TCP方。

我是一個新手Python用戶,並且已經'砍死'了我到目前爲止所擁有的一切。基本上兩個線程,一個不斷接受UDP流數據(速率:每秒10條消息),另一個線程監聽和處理TCP請求。我一直在計劃的方法是,當TCP請求流數據被啓動時設置一個標誌,當該標誌爲True時,處理傳入UDP數據的函數將把格式化幀發送到建立的TCP會話。

問題:我不知道如何引用或使用自己操作範圍之外的已建立的TCP會話。即從我剛剛使用的線程範圍內發送配置數據到已建立的會話: self.request.sendall(packedConfigFrame)

幫助非常感謝。

代碼以供參考:http://pastebin.com/PbCb59sy

回答

0

可能想嘗試使用deque,要創建一個全局變量說

udpData = collections.deque() 

那麼你的UDP信息存儲到udpData每當你得到他們。並且從TCP線程,當你的'TCP請求流數據'標誌爲真時,調用udpData並從中使用數據(你可以根據需要從隊列的兩端彈出數據),然後處理UDP數據併發送格式化的幀到建立的TCP會話。

+0

好想法。我之前使用過deque,並沒有考慮到這一點。 我的問題是,如果我的TCP線程被實例化來處理傳入的連接,我該如何處理這個數據將被流式傳輸'24/7'一旦請求。我不想在'請求處理程序'線程中放置一個循環 - 因爲它也需要監聽'停止請求' – djseanty 2014-09-25 10:11:08

+0

我不認爲你需要在'請求處理程序'中放置另一個循環。在Handle例程中,你的原始代碼中有一個'while'循環,當你設置Stream時,你會檢查'udpData'中是否有數據,如果你這樣做,你只需要彈出一個項目,然後格式化它,併發送它。而且由於while循環一直在運行,所以,如果蒸汽爲真並且udpData有數據,那麼它應該發出數據。 – 2014-09-25 11:16:38

+0

隨着它如何設置;在請求處理程序中,while循環只在收到TCP請求時迭代。 – djseanty 2014-09-25 15:44:32