を操作している方法を見て。
Twisted Pythonは、inlinecallbacksまたは(やや醜い)deferredGeneratorスタイルのいずれかを使用して非常に命令的なスタイルを可能にします。これらのメソッドを使用すると、読みやすく理解しやすいイベントドリブンコールバックコードを使用するプロシージャを記述できます。実装は、あなたの関数を遅れのシーケンスを生成するレイジーシーケンスに変えます。
具体的には、深くネストされたコールバック関数/ lambdas/closuresのセットを構築する必要はなく、関数の制御を任意の時点でイベントループに戻すことができます。あなたは精神的にこれをコルーチンや協調的なマルチタスクとして再分類することができます。それは仕事を終わらせる。例は次のように(醜いdeferredGeneratorスタイルを使用して)次のようになります。
@defer.deferredGenerator
def foo(arg):
bar = nonBlockingFunction(foo)
baz = waitForDeferred(aFunctionThatReturnsADeferredToo(bar))
yield baz #Returns control to the event loop
output = baz.getResult() #This gets the output of aFunctionThat...Too above
yield output #This is how we return a result instead of using return
@defer.deferredGenerator
def aFunctionThatReturnsADeferredToo(put_bar_here):
"""Stuff happens here...."""
...etc...
ありクリーナーですinlineCallbacks方法を示し、ここでは別のポストがあるが、2.5またはそれ以降(/ RHEL 5 CentOSに下にないという意味のpythonが必要です私は悲しいかなか私のアプリのために立ち往生しているシリーズ)。あなたがそれを使用することができれば。
あなたが知っていると愛している古い学校のpython必須のもののように見えますが、ネストされた関数とlambdasのトンなしで維持する方が簡単です。私はまだPythonがブロックを持っていることを望む。
デバッグに関しては、初期化コードのどこかでdefer.setDebugging(True)コールを使用して、リアクトルのデバッグをねじりにすることができます。これにより、コード内に例外が発生した元のトレースバックがアタッチされ、実際にエラーが発生した場所を簡単に確認できます。プロダクションに行く前にsetDebuggingステートメントを編集することを覚えておいてください。膨大な量のイントロスペクションが発生します(ひどく恐ろしい場合は、straceで見てください)。
詳細を教えてください。 – keyle