2
我有一個可視化的Python網絡流量。它使用Twisted進行網絡連接並調用run()
它還具有用於繪圖和調用show()
的matplotlib。這些功能似乎都不會返回,但我需要調用它們來啓動網絡,然後顯示情節並最終更新網絡上發生的情節。任何解決方案我需要線程嗎?如何運行兩個python阻塞函數matplotlib.show()和twisted.reactor.run()?
我有一個可視化的Python網絡流量。它使用Twisted進行網絡連接並調用run()
它還具有用於繪圖和調用show()
的matplotlib。這些功能似乎都不會返回,但我需要調用它們來啓動網絡,然後顯示情節並最終更新網絡上發生的情節。任何解決方案我需要線程嗎?如何運行兩個python阻塞函數matplotlib.show()和twisted.reactor.run()?
matplotlib是一個GUI工具包的頂層。哪個GUI工具包取決於每個用戶的配置,在站點範圍內的配置,以及您所擁有的matplotlib代碼的詳細信息。
Twisted具有與某些GUI工具包集成的特定支持。因此,例如,您可以運行帶有Gtk後端的matplotlib,並使用Twisted的Gtk集成,然後一切都將很好地結合在一起。
這裏有5分鐘砍我扔在一起,根據我所知道的關於整合各種mainloops,並在matplotlib源代碼檢查的一點點:
if __name__ == '__main__':
from mpl import main
raise SystemExit(main())
from matplotlib import use
use('GTK')
from matplotlib import pyplot
from matplotlib.backends import backend_gtk
from twisted.internet import gtk2reactor
gtk2reactor.install()
from twisted.internet import reactor, task
class TwistedGtkShow(backend_gtk.Show):
running = False
def mainloop(self):
if not self.running:
self.running = True
reactor.run()
def main():
pyplot.plot([1,2,3,4])
pyplot.ylabel('some numbers')
def proof():
print 'Twisted!'
task.LoopingCall(proof).start(3)
TwistedGtkShow()()
注意:
mpl.py
文件(因此mpl
進口往上頂)use('GTK')
呼叫進口前gtk2reactor.install()
呼叫進口reactor
pyplot.show()
與我自己Show
子類調用使用mainloop
方法啓動GTK的主循環和的扭曲主循環(兩通過reactor.run()
)這個例子似乎工作得很好。我還沒有深入探討這個問題,所以如果有問題只會在更高級的用法下出現,我不知道它們。
您可以使用線程,或者可以將扭曲的主循環更新掛鉤爲matplotlib事件,或將matplotlib更新掛鉤爲扭曲的事件。 –