2016-12-06 69 views
0

調用函數我有twisted.internet.reactor問題,我所有的客戶有完全一致的環境中,但只有一些經驗,這個問題:扭曲反應堆無法從線程正確

他們正確地通過ws和交流第一幾條消息connectTCP到服務器。在約一分鐘,他們應該通過

def execute(self, message, callback=None): 
    print(">>>", message, flush=True) 
    reactor.callFromThread(self._client_protocol_instance.send, message, callback) 

self._client_protocol_instance.send方法將消息發送到服務器的定義如下:

def send(self, command, callback): 
    print("send", command, callback, flush=True) 
    timestamp = int(time() * 1000000) 
    msg = (command.strip() + " --timestamp:" + str(timestamp)) 
    if _self._debug: 
     _self._commands[str(timestamp)] = msg 
    if callback is not None: 
     _self._callbacks[str(timestamp)] = callback 
    payload = msg.encode() 
    _self._status_controller.set_state(payload) 
    self.sendMessage(payload) 

首先print顯示了在標準輸出,但第二個沒有。我假設send沒有得到執行。在reactor.run()之後,這是整個程序中唯一參考reactor

服務器立即檢測到發生這種情況後終止客戶端的過程,因此當時連接仍然存在。

這可能是什麼原因造成的?

回答

0

我找到了解決方案,問題在於以前的任務有時不會完成,因爲它試圖發送消息。

我解決了這個問題,將所有cpu-heavy響應處理邏輯移入線程以釋放其他消息的反應器。