0

私はactionscriptとjavascriptを書きました。コールバックを追加してコードを呼び出すことは、日常生活ではごく普通のことです。

しかし、Pythonに来たのは簡単な仕事ではないようです。コールバック スタイルで書かれているものをほとんど見ることができません。偽のコールバックではなく、本物のコールバックを意味します。偽のコールバックの例を次に示します。

ダウンロードするファイルのリスト。次のように記述できます。

urls = []

def downloadfile(url,callback):
    //download the file 
    callback()

def downloadNext():
    if urls:
       downloadfile(urls.pop(),downloadNext)

downloadNext()

これは機能しますが、最終的に再帰の最大制限を満たしますが、実際のコールバックはそうではありません。

私が理解している限り、実際のコールバックはプログラムから来ることはできません.CPUクロック、またはハードウェアIO状態の変化などの物理学から来る必要があります.ランタイムがこのintに関するコードを登録した場合、それを実行した場合、OSはそれをシグナルまたはイベントなどとしてラップし、最終的にアプリケーションに渡します.(間違っている場合は指摘してください)したがって、回避します関数呼び出しスタックが積み重なってオーバーフローします。そうしないと、無限再帰に陥ります。

複数のタスクを処理するために Python でコルーチンのようなものがありましたが、非常に慎重に行う必要があります。ルーチンのいずれかでブロックされている場合、すべてのタスクがブロックされます。

twisted や gevent のようなサード パーティのライブラリがいくつかありますが、入手してインストールするのが非常に面倒なようです。

マルチプロセッシング、重い、Linux でのみ動作

スレッド化は、GIL のため、決して最初の選択肢ではなく、疑似的なもののようです。

なぜpythonは標準ライブラリで実装を提供しないのですか?そして、私が望む本当のコールバックを取得する他の簡単な方法はありますか?

4

1 に答える 1