問題タブ [python-asyncio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python 標準ライブラリ コードのスコープ: これらの変数が存在する可能性はありますか?
asyncio パッケージの__init__.py
ファイル (Python 3.4.1) を調べたところ、最後の数行に出くわしました。
上記のステートメントを考慮して、それらの名前が実際には存在しないはずなのにevents
、他のすべてのサブモジュール (およびそれぞれの変数) にアクセスできる可能性はありますか? 私が見る限り、標準ライブラリのディレクトリは含まれておらず、サブモジュール自体も変数を定義していません。__all__
from … import *
asyncio/
sys.path
submodule.__all__
余談__init__.py
ですが、ファイルを見て実際に知りたかったのは、すべてのサブモジュールの名前を__all__
パッケージのリストに自動的に追加する方法でし__init__.py
た。標準ライブラリの他のパッケージ)。私の現在のアプローチは次のとおりです。おそらく、あなたの答えは、asyncio
パッケージがどのようにしてよりpythonicに見えるトリックをうまくやってのけるかを明らかにするでしょう。
python - Python の asyncio でデータを順番にフェッチする
Web サイトからデータを取得し、結果をデータベースにダンプする Python 2.7 プログラムがあります。コンシューマ プロデューサー モデルに従い、threading モジュールを使用して記述されています。
楽しみのために、新しいasyncioモジュール (3.4 以降)を使用してこのプログラムを書き直したいのですが、これを適切に行う方法がわかりません。
最も重要な要件は、プログラムが同じ Web サイトから順番にデータを取得する必要があることです。たとえば、' http://a-restaurant.com 'という URL の場合、最初に' http://a-restaurant.com/menu/0 'を取得し、次に' http://a-restaurant.com/menu/ ' を取得する必要があります。 1 '、次に' http://a-restaurant.com/menu/2 '、... 順番にフェッチされない場合、Web サイトはページの配信を完全に停止し、0 から開始する必要があります。
ただし、別の Web サイト ( 「http://another-restaurant.com」 ) の別のフェッチは、同時に実行できます (実行する必要があります) (他のサイトにも順次制限があります)。
threading モジュールは、Web サイトごとに個別のスレッドを作成でき、各スレッドで 1 つのページの読み込みが完了するまで待ってから別のページを取得できるため、これに適しています。
これは、スレッド化バージョン (Python 2.7) から大幅に簡略化されたコード スニペットです。
そして、これが私がasyncioでそれをやろうとした方法です(3.4.1で):
そして、すべてを順不同でフェッチして出力します。まあ、それがそれらのコルーチンの全体的なアイデアだと思います。aiohttp を使用せずに urllib でフェッチする必要がありますか? しかし、最初のレストランのフェッチは、他のレストランのフェッチをブロックしますか? 私はこれを完全に間違って考えているだけですか?(これは、順番に取得するための単なるテストです。キューの部分にはまだ到達していません。)
python-3.x - Python3 asyncio 同時 HTTP get 要求で接続が閉じない
Python3.4 の asyncio ライブラリを使い始めたばかりで、一度に 50 個の Web ページを同時に取得しようとする小さなプログラムを作成しました。「開いているファイルが多すぎます」という例外で数百回のリクエストを行うと、プログラムが異常終了します。
私の fetch メソッドは「response.read_and_close()」メソッド呼び出しで接続を閉じると思いました。
ここで何が起こっているのですか?私はこの問題に正しい方法で取り組んでいますか?
私が得ているエラーは次のとおりです。
python - aiohttp で http 応答エンコーディングを検出する
asyncio
非同期 Web クローラーを作成する方法を学ぼうとしています。以下は、フレームワークをテストするための粗雑なクローラーです。
非常asyncio
によく文書化されているように見えますが、文書化aiohttp
がほとんどないように思われるため、自分でいくつかのことを解決するのに苦労しています.
まず、ページ応答のエンコーディングを検出する方法はありますか? 次に、接続がセッション内で維持されるように要求できますか? または、これはデフォルトで True のようrequests
ですか?
python - asyncio を使用して子プロセスから stdout/stderr をストリーミングし、終了コードを取得する方法は?
Windows 上の Python 3.4 では、子プロセスによって stdout/stderr に書き込まれたデータをストリーミングする必要があります。つまり、Python 3.4 で導入されたasyncioフレームワークを使用して、発生した出力を受け取ります。その後、プログラムの終了コードも特定する必要があります。これどうやってするの?
python - Python Asyncio サブプロセスが終了しない
サブプロセスで asyncio をテストするために使用している単純な python プログラムがあります。
これをコマンド ラインで実行すると、目的の結果が得られます。
ただし、asyncio から呼び出されると、決して終了しません。
ps ax
このプロセスが<defunct>
であることを示しています。意味がわかりません
python - どうにかして非同期キューをサブプロセスと共有できますか?
を介して起動される親プロセスから子プロセスにデータを渡すためにキューを使用したいと思いますmultiprocessing.Process
。ただし、親プロセスは Python の新しいasyncio
ライブラリを使用するため、キュー メソッドはノンブロッキングである必要があります。私の知る限り、asyncio.Queue
はタスク間通信用に作成されており、プロセス間通信には使用できません。また、メソッドとメソッドがあることmultiprocessing.Queue
は知っていますが、実際には現在のタスクをブロックするコルーチンが必要です (プロセス全体ではありません)。/をラップするコルーチンを作成する方法はありますか? 別のメモとして、同じプロセスで実行されているイベント ループと内部的に互換性があるスレッドを使用していますか?put_nowait()
get_nowait()
put_nowait()
get_nowait()
multiprocessing.Queue
そうでない場合、他にどのようなオプションがありますか? 非同期ソケットを利用することでそのようなキューを自分で実装できることは知っていますが、それを回避できることを願っていました...
編集:
ソケットの代わりにパイプを使用することも検討しましたが、asyncio
互換性がないようですmultiprocessing.Pipe()
。より正確には、ファイルのようなオブジェクトではないPipe()
オブジェクトのタプルを返します。ただし、のメソッド/メソッドおよび/すべてはファイルのようなオブジェクトを想定しているため、そのような. 対照的に、パッケージがパイプとして使用する通常のファイルのようなオブジェクトはまったく問題なく、簡単に と組み合わせて使用できます。Connection
asyncio.BaseEventLoop
add_reader()
add_writer()
connect_read_pipe()
connect_write_pipe()
Connection
subprocess
asyncio
更新:
パイプ アプローチをもう少し調査することにしました。ファイル記述子を 経由で取得し、それを に渡すことで、 からConnection
返されたオブジェクトmultiprocessing.Pipe()
をファイルのようなオブジェクトに変換しました。最後に、結果のファイルのようなオブジェクトをイベント ループの/に渡しました。(誰かが正確なコードに興味がある場合は、関連する問題に関するメーリング リストの議論があります。) しかし、ストリームを ing すると、これを修正することができませんでした。また、 Windows のサポートが不足していることを考慮すると、これ以上追求するつもりはありません。fileno()
os.fdopen()
connect_read_pipe()
connect_write_pipe()
read()
OSError: [Errno 9] Bad file descriptor
windows - asyncio イベント ループが実行されているときに SIGINT をキャッチできないのはなぜですか?
Windows で Python 3.4.1 を使用して、asyncio イベント ループの実行中にプログラムを中断できないことがわかりました (つまり、ターミナルで Ctrl+C を押しても)。さらに言えば、SIGINT シグナルは無視されます。逆に言えば、イベント ループでない場合は SIGINT が処理されると判断しました。
asyncio イベントループの実行時に SIGINT が無視されるのはなぜですか?
以下のプログラムは問題を示しているはずです - ターミナルで実行し、Ctrl+C を押して停止しようとすると、実行し続けるはずです:
公式 (Tulip) メーリング リストの議論を参照してください。
python - Python (3.4) から SQL Server に非同期的にクエリを実行することは可能ですか?
Python (3.4) から Microsoft SQL Server に対して、つまりasyncioイベント ループのコンテキストで非同期クエリを実行することは可能ですか?
do_it
以下は、(非同期) SQL クエリを関数に組み込む必要があるスケルトン非同期プログラムです。