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
いくつかの問題が見つかる可能性があるため、何か見つけた場合は報告してください。