Deferred は、コードをノンブロッキングにするために何もできません。できることは、既存の非ブロッキング イベントに基づいてコールバック チェーンを管理することだけです。これにより、「一部のバイトが受信された」、「接続が失われた」、「ユーザーがボタンをクリックした」などの低レベルのイベントを、「HTTP 要求が応答された」や「ユーザーが応答した」などの高レベルのイベントに変換できます。あなたの質問"。 deferLater、たとえば、Deferredしばらく時間が経過したときに単純に起動します。
を使用するのにリアクターは必要ありませんDeferred。例えば:
>>> from twisted.internet.defer import Deferred
>>> d = Deferred()
>>> def transformResult(result):
... return result + 5
...
>>> d.addCallback(transformResult)
<Deferred at 0x100521200>
>>> def itsDone(result):
... print("It's done: " + str(result))
...
>>> d.addCallback(itsDone)
<Deferred at 0x100521200>
>>> d.callback(3)
It's done: 8
>>>
callback()どこからでも電話できます。通常はリアクタ イベントから呼び出されます。あなたの場合、代わりにイベントcallbackから呼び出したいと思うでしょう。Tk
とは言ってもTk、メインのリアクター スレッドにイベントを取得する方法が必要です。これは、 のメインループを認識しているリアクターを使用してTk行います。コメンターは、これには既存の API があると既に述べていますtwisted.internet.tksupport。これは最近最も人気のある GUIではないことを考えると、Tkいくつかの問題が見つかる可能性があるため、何か見つけた場合は報告してください。