Twistedで逆プロキシを開発するのに問題があります。それは動作しますが、それはあまりにも複雑で渦巻いているようです。そう多くはブードゥーのように感じます。Pythonでの非同期プログラミングTwisted
ウェブまたは書籍に非同期プログラム構造の例がありますか??ベストプラクティスガイドの一種ですか?私がプログラムを完成させたら、何らかの形で構造を見ることができるようになりたい、スパゲッティのボウルを見ることができないようにしたい。
Twistedで逆プロキシを開発するのに問題があります。それは動作しますが、それはあまりにも複雑で渦巻いているようです。そう多くはブードゥーのように感じます。Pythonでの非同期プログラミングTwisted
ウェブまたは書籍に非同期プログラム構造の例がありますか??ベストプラクティスガイドの一種ですか?私がプログラムを完成させたら、何らかの形で構造を見ることができるようになりたい、スパゲッティのボウルを見ることができないようにしたい。
ねじれを使用したくない場合は、私はしばらく前に使った素晴らしいガイドがありました。ここにはlink to itがあります。
ツイストは、large number of examplesを含みます。特に"evolution of Finger" tutorialには、非常に小さなカーネルから多くの可動部分を持つ複雑なシステムまで、非同期プログラムがどのように成長するかについての完全な説明が含まれています。あなたにとって興味深いもう一つのチュートリアルは、単にwriting serversです。
ツイスト、あるいは他の非同期ネットワーキング・ライブラリ(のようなasyncore、MINA、またはACE)について、心に留めておくべき重要なことは、何かが起こるとき、あなたのコードが呼び出されるだけということです。 「ブードゥー」のように聞こえる部分は、コールバックの管理です(例:Deferred
)。一直線上を走るコードを書くことに慣れていて、ただちに結果を返す関数を呼び出すのであれば、何かを返すのを待つという考えは混乱するかもしれません。しかし、魔法のようなものはありません。コールバックについての「ブードゥー」はありません。最低レベルでは、原子炉はただ周りに座って、物事の数が少ないの一つが起こることを待っている:
dataReceived
を呼び出します)callLater
で登録された関数を呼び出します)。listenXXX
またはconnectXXX
ファンクションで登録された工場でbuildProtocol
と呼ぶ)。connectionLost
を呼び出します)を落としてきました。もちろん、起こったイベントは、より多くのイベントに結びついたり切り離されたりするので、あなたのプログラムは楽しいものになります。それを超えて、興味深い特別な非同期プログラム構造に特別なものは何もありません。イベントハンドラとコールバックは単なるオブジェクトであり、コードは通常の方法で実行されます。
単純な「イベント駆動型エンジン」は、このプロセスがどれほどシンプルであるかを示しています。ツイストのようなライブラリーの中核
# Engine
import time
class SimplestReactor(object):
def __init__(self):
self.events = []
self.stopped = False
def do(self, something):
self.events.append(something)
def run(self):
while not self.stopped:
time.sleep(0.1)
if self.events:
thisTurn = self.events.pop(0)
thisTurn()
def stop(self):
self.stopped = True
reactor = SimplestReactor()
# Application
def thing1():
print 'Doing thing 1'
reactor.do(thing2)
reactor.do(thing3)
def thing2():
print 'Doing thing 2'
def thing3():
print 'Doing thing 3: and stopping'
reactor.stop()
reactor.do(thing1)
print 'Running'
reactor.run()
print 'Done!'
the Python select moduleようなモジュールによって露出されたように、メインループ内の機能は、sleep
ではなく、select()
又はpoll()
ようなオペレーティングシステムコール。私は "like"と言っていますselect
、これはプラットフォーム間で多くのAPIが異なるため、ほとんどすべてのGUIツールキットには独自のバージョンがあります。 Twistedは現在、このテーマに関する14の異なるバリエーションに抽象的なインターフェースを提供しています。このようなAPIが提供する一般的なことは、「ここには私が待っているイベントのリストがあります。それらのうちの1つが起こるまで眠りにつき、目を覚まして、それがどれであるかを教えてください。"
私はあなたがより良い運びを持っていることを望んでいます。これは現在、私の好きなフレームワークの1つです。 – Dustin