問題タブ [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.

0 投票する
0 に答える
157 参照

python - Python 標準ライブラリ コードのスコープ: これらの変数が存在する可能性はありますか?

asyncio パッケージの__init__.pyファイル (Python 3.4.1) を調べたところ、最後の数行に出くわしました。

上記のステートメントを考慮して、それらの名前が実際には存在しないはずなのにevents、他のすべてのサブモジュール (およびそれぞれの変数) にアクセスできる可能性はありますか? 私が見る限り、標準ライブラリのディレクトリは含まれておらず、サブモジュール自体も変数を定義していません。__all__from … import *asyncio/sys.pathsubmodule.__all__

余談__init__.pyですが、ファイルを見て実際に知りたかったのは、すべてのサブモジュールの名前を__all__パッケージのリストに自動的に追加する方法でし__init__.pyた。標準ライブラリの他のパッケージ)。私の現在のアプローチは次のとおりです。おそらく、あなたの答えは、asyncioパッケージがどのようにしてよりpythonicに見えるトリックをうまくやってのけるかを明らかにするでしょう。

0 投票する
2 に答える
2998 参照

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 でフェッチする必要がありますか? しかし、最初のレストランのフェッチは、他のレストランのフェッチをブロックしますか? 私はこれを完全に間違って考えているだけですか?(これは、順番に取得するための単なるテストです。キューの部分にはまだ到達していません。)

0 投票する
2 に答える
2306 参照

python-3.x - Python3 asyncio 同時 HTTP get 要求で接続が閉じない

Python3.4 の asyncio ライブラリを使い始めたばかりで、一度に 50 個の Web ページを同時に取得しようとする小さなプログラムを作成しました。「開いているファイルが多すぎます」という例外で数百回のリクエストを行うと、プログラムが異常終了します。

私の fetch メソッドは「response.read_and_close()」メソッド呼び出しで接続を閉じると思いました。

ここで何が起こっているのですか?私はこの問題に正しい方法で取り組んでいますか?

私が得ているエラーは次のとおりです。

0 投票する
1 に答える
1365 参照

python - aiohttp で http 応答エンコーディングを検出する

asyncio非同期 Web クローラーを作成する方法を学ぼうとしています。以下は、フレームワークをテストするための粗雑なクローラーです。

非常asyncioによく文書化されているように見えますが、文書化aiohttpがほとんどないように思われるため、自分でいくつかのことを解決するのに苦労しています.

まず、ページ応答のエンコーディングを検出する方法はありますか? 次に、接続がセッション内で維持されるように要求できますか? または、これはデフォルトで True のようrequestsですか?

0 投票する
4 に答える
3307 参照

python - asyncio を使用して子プロセスから stdout/stderr をストリーミングし、終了コードを取得する方法は?

Windows 上の Python 3.4 では、子プロセスによって stdout/stderr に書き込まれたデータをストリーミングする必要があります。つまり、Python 3.4 で導入されたasyncioフレームワークを使用して、発生した出力を受け取ります。その後、プログラムの終了コードも特定する必要があります。これどうやってするの?

0 投票する
1 に答える
3412 参照

python - Python Asyncio サブプロセスが終了しない

サブプロセスで asyncio をテストするために使用している単純な python プログラムがあります。

これをコマンド ラインで実行すると、目的の結果が得られます。

ただし、asyncio から呼び出されると、決して終了しません。

ps axこのプロセスが<defunct>であることを示しています。意味がわかりません

0 投票する
3 に答える
11575 参照

python - どうにかして非同期キューをサブプロセスと共有できますか?

を介して起動される親プロセスから子プロセスにデータを渡すためにキューを使用したいと思いますmultiprocessing.Process。ただし、親プロセスは Python の新しいasyncioライブラリを使用するため、キュー メソッドはノンブロッキングである必要があります。私の知る限り、asyncio.Queueはタスク間通信用に作成されており、プロセス間通信には使用できません。また、メソッドとメソッドがあることmultiprocessing.Queueは知っていますが、実際には現在のタスクをブロックするコルーチンが必要です (プロセス全体ではありません)。/をラップするコルーチンを作成する方法はありますか? 別のメモとして、同じプロセスで実行されているイベント ループと内部的に互換性があるスレッドを使用していますか?put_nowait()get_nowait()put_nowait()get_nowait()multiprocessing.Queue

そうでない場合、他にどのようなオプションがありますか? 非同期ソケットを利用することでそのようなキューを自分で実装できることは知っていますが、それを回避できることを願っていました...

編集: ソケットの代わりにパイプを使用することも検討しましたが、asyncio互換性がないようですmultiprocessing.Pipe()。より正確には、ファイルのようなオブジェクトではないPipe()オブジェクトのタプルを返します。ただし、のメソッド/メソッドおよび/すべてはファイルのようなオブジェクトを想定しているため、そのような. 対照的に、パッケージがパイプとして使用する通常のファイルのようなオブジェクトはまったく問題なく、簡単に と組み合わせて使用​​できますConnectionasyncio.BaseEventLoopadd_reader()add_writer()connect_read_pipe()connect_write_pipe()Connectionsubprocessasyncio

更新: パイプ アプローチをもう少し調査することにしました。ファイル記述子を 経由で取得し、それを に渡すことで、 からConnection返されたオブジェクトmultiprocessing.Pipe()をファイルのようなオブジェクトに変換しました。最後に、結果のファイルのようなオブジェクトをイベント ループの/に渡しました。(誰かが正確なコードに興味がある場合は、関連する問題に関するメーリング リストの議論があります。) しかし、ストリームを ing すると、これを修正することができませんでした。また、 Windows のサポートが不足していることを考慮すると、これ以上追求するつもりはありません。fileno()os.fdopen()connect_read_pipe()connect_write_pipe()read()OSError: [Errno 9] Bad file descriptor

0 投票する
3 に答える
4842 参照

windows - asyncio イベント ループが実行されているときに SIGINT をキャッチできないのはなぜですか?

Windows で Python 3.4.1 を使用して、asyncio イベント ループの実行中にプログラムを中断できないことがわかりました (つまり、ターミナルで Ctrl+C を押しても)。さらに言えば、SIGINT シグナルは無視されます。逆に言えば、イベント ループでない場合は SIGINT が処理されると判断しました。

asyncio イベントループの実行時に SIGINT が無視されるのはなぜですか?

以下のプログラムは問題を示しているはずです - ターミナルで実行し、Ctrl+C を押して停止しようとすると、実行し続けるはずです:

公式 (Tulip) メーリング リストの議論を参照してください。

0 投票する
3 に答える
7774 参照

python - Python (3.4) から SQL Server に非同期的にクエリを実行することは可能ですか?

Python (3.4) から Microsoft SQL Server に対して、つまりasyncioイベント ループのコンテキストで非同期クエリを実行することは可能ですか?

do_it以下は、(非同期) SQL クエリを関数に組み込む必要があるスケルトン非同期プログラムです。