Python 非同期モジュールの使用方法
コルーチンはマイクロスレッドとしても知られ、ユーザー モードでコンテキストを切り替えるためのテクノロジです。つまり、これは実際には、実行間を切り替えるコード ブロックを実装するスレッドです。
Python のコルーチンのサポートは、ジェネレーターを通じて実装されます。
ジェネレーターでは、for ループを反復処理するだけでなく、next() 関数を継続的に呼び出して、yield ステートメントによって返される次の値を取得することもできます。 Python の yield は、値を返すために使用できるだけでなく、呼び出し元によって渡されたパラメーターを受け取ることもできます。
1. ジェネレーターとは
Pythonのジェネレーターと呼ばれる仕組みは、ループしながら計算を行います。アルゴリズムを指定し、呼び出し中に真の値を計算します。
ジェネレーターから値を取得する必要がある場合は、next() を使用できますが、通常は for ループを使用して値を取得します。
generator 実装ジェネレーター、() を使用して
を表します。例: [1, 2, 3, 4, 5]、ジェネレーター メソッド:
data = [1, 2, 3, 4, 5] (x * x for x in len(data))
関数定義複雑なロジックを含むシナリオでは、最初の方法を使用するのは適切ではないため、次のような型関数を定義する方法があります。
def num(x): while (x < 10): print(x * x) x += 1 g = num(1) for item in g: print(item)
関数内に yield が出現すると、generator
def num(x): while (x < 10): yield x * x # 返回结果,下次从这个地方继续? x += 1 g = num(1) # 返回的是generator对象 for item in g: print(item)
はジェネレータ関数となり、next() が呼び出されるたびに実行され、yield 文に遭遇すると戻り、再度実行されると、最後に返された yield 文から実行が継続されます。
2. asyncio を使用して非同期 io を実装する
非同期 io はイベント ループとコルーチン関数を通じて実装されます
イベント ループは内部タスクを継続的に監視し、存在する場合は実行します。タスク 実行可能タスクと実行中タスクに分けられ、イベント ループによって処理タスクが決定され、タスク リストが空の場合、イベントは終了します。
import asyncio # 生成或获取事件循环对象loop;类比Java的Netty,我理解为开启一个selector loop = asyncio.get_event_loop() # 将协程函数(任务)提交到事件循环的任务列表中,协程函数执行完成之后终止。 # run_until_complete 会检查协程函数的运行状态,并执行协程函数 loop.run_until_complete( func() )
テストデモ
import asyncio import time async def test(): print("io等待") await asyncio.sleep(1) return 'hello' async def hello(): print("Hello world") r = await test() print("hello again") loop = asyncio.get_event_loop() tasks = [hello(), hello()] loop.run_until_complete(asyncio.wait(tasks)) loop.close()
コルーチン関数: async def によって変更された関数; def func() などの通常の def と比較して、次のことができます。関数によって返された値は直接受信されますが、コルーチン関数の場合はコルーチン オブジェクトが返されます。
コルーチン関数を実行したい場合は、このオブジェクトをイベント ループに渡して処理する必要があります。
# 测试协程 import asyncio import time, datetime # 异步函数不同于普通函数,调用普通函数会得到返回值 # 而调用异步函数会得到一个协程对象。我们需要将协程对象放到一个事件循环中才能达到与其他协程对象协作的效果 # 因为事件循环会负责处理子程 序切换的操作。 async def Print(): return "hello" loop = asyncio.get_event_loop() loop.run_until_complete(Print)
await:
使用法: response = await 待機可能オブジェクト
待機可能オブジェクト: コルーチン オブジェクト、Future、Task オブジェクトは IO 待機として理解できます。
response: await の結果は、IO 操作が発生したときに現在のコルーチン (タスク) を一時停止します。現在のコルーチンが一時停止されると、イベント ループは他のコルーチン (タスク) を実行できます。注: Can wait Ifオブジェクトがコルーチン オブジェクトの場合はシリアルになり、Task オブジェクトの場合は Task オブジェクトが同時に実行され、イベント ループ リストに複数のタスクを追加できます。 「asyncio.create_task()」を使用して「Task」オブジェクトを作成できます。渡されるパラメータはコルーチン オブジェクトです。
import asyncio import time, datetime async def display(num): pass tasks = [] for num in range(10): tasks.append(display(num)) # 生成任务列表 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks))
asnyc と await は新しい構文で、古いバージョンは次のとおりです: @asyncio.coroutine およびyield from
3. aiohttp
asyncio は、シングルスレッドの同時 IO 操作を実装できます。クライアント側でのみ使用される場合、あまり強力ではありません。 asyncio が Web サーバーなどのサーバー側で使用される場合、HTTP 接続は IO 操作であるため、シングルスレッドのコルーチンを使用して複数のユーザーに対する高い同時実行性のサポートを実現できます。
aiohttp は、asyncio に基づく HTTP フレームワークです。
requests get request のようにリクエストを送信できます。
params パラメータで渡すパラメータを指定できます。
async def fetch(session): async with session.get("http://localhost:10056/test/") as response: data = json.loads(await response.text()) print(data["data"])
post request
2 つのタスクを非同期に実行する
- #ネットワーク リクエストでは、リクエストはセッションであり、aiohttp は ClientSession を使用してセッションを管理します # # session.method を使用してリクエストを送信します
- 応答情報応答の場合、status を使用して応答ステータス コードを取得し、text() を使用して応答内容を取得します。 text()のエンコード形式。応答結果を待つ前に、response.text() の前に await キーワード
async def init(num): async with aiohttp.ClientSession() as session: if num == 1: time.sleep(5) print("session begin", num) async with session.post("http://localhost:10056/hello/", data=json.dumps({"data": "hello"})) as response: print("client begin", num) data = json.loads(await response.text()) print(data["data"]) print("session end", num) print("other") if __name__ == '__main__': loop = asyncio.get_event_loop() tasks = [init(1), init(2)] loop.run_until_complete(asyncio.wait(tasks))
ログイン後にコピーを追加する必要があります。
以上がPython 非同期モジュールの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

hadidb:軽量で高レベルのスケーラブルなPythonデータベースHadIDB(HadIDB)は、Pythonで記述された軽量データベースで、スケーラビリティが高くなっています。 PIPインストールを使用してHADIDBをインストールする:PIPINSTALLHADIDBユーザー管理CREATEユーザー:CREATEUSER()メソッド新しいユーザーを作成します。 Authentication()メソッドは、ユーザーのIDを認証します。 fromhadidb.operationimportuseruser_obj = user( "admin"、 "admin")user_obj。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

MySQLワークベンチは、構成が正しい場合、MariadBに接続できます。最初にコネクタタイプとして「mariadb」を選択します。接続構成では、ホスト、ポート、ユーザー、パスワード、およびデータベースを正しく設定します。接続をテストするときは、ユーザー名とパスワードが正しいかどうか、ポート番号が正しいかどうか、ファイアウォールが接続を許可するかどうか、データベースが存在するかどうか、MariadBサービスが開始されていることを確認してください。高度な使用法では、接続プーリングテクノロジーを使用してパフォーマンスを最適化します。一般的なエラーには、不十分な権限、ネットワーク接続の問題などが含まれます。エラーをデバッグするときは、エラー情報を慎重に分析し、デバッグツールを使用します。ネットワーク構成を最適化すると、パフォーマンスが向上する可能性があります

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQL接続は、次の理由が原因である可能性があります。MySQLサービスは開始されず、ファイアウォールは接続をインターセプトし、ポート番号が間違っています。ユーザー名またはパスワードが間違っています。My.cnfのリスニングアドレスは不適切に構成されています。トラブルシューティング手順には以下が含まれます。 2.ファイアウォール設定を調整して、MySQLがポート3306をリッスンできるようにします。 3.ポート番号が実際のポート番号と一致していることを確認します。 4.ユーザー名とパスワードが正しいかどうかを確認します。 5. my.cnfのバインドアドレス設定が正しいことを確認してください。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。
