2015-10-28 115 views
1

我在我的應用程序中使用了twisted並在它自己的線程中運行它。像這樣使用扭曲效果很好,但它永遠不會正常停止。如何在自己的線程中運行並正確停止?

例子:

# Python 2.7.6 
# Twisted==15.4.0 

import time 
import threading 
from twisted.internet import reactor 

print("starting reactor") 
reactor_thread = threading.Thread(target=reactor.run, 
           kwargs={"installSignalHandlers": False}) 
reactor_thread.start() 
print("reactor started") 

time.sleep(1) 

print("stopping reactor") 
reactor.stop() 
print("joining thread") 
reactor_thread.join() 
print("reactor stopped") # <- never reached 

輸出:

starting reactor 
reactor started 
stopping reactor 
joining thread 

回答

1

您應該使用Crochet。它爲您運行線程中的反應堆。

您還應該認真考慮重構您的應用程序以尊重Twisted的成語。這樣做將允許您的應用程序與其他Twisted應用程序組成,並將減輕您的維護負擔。 (然後你不必在一個線程中運行一個反應堆。)

+0

完全重構我的應用程序並不是真正的選擇,因爲我依賴於也必須更改的依賴關係。我想要做的就是可靠地停止反應堆。 –

相關問題