Movatterモバイル変換


[0]ホーム

URL:


Hironori Sekine, profile picture
Uploaded byHironori Sekine
PDF, PPTX50,789 views

Pythonによる非同期プログラミング入門

Pythonによる非同期プログラミング入門

Embed presentation

Download as PDF, PPTX
Pythonによる 非同期プログラミング入門 関根裕紀
自己紹介 • 関根裕紀(せきね ひろのり) • アライドアーキテクツ株式会社 • ソフトウェア・エンジニア • Twitter(@checkpoint )
経歴 • 前職まで • RSSリーダー、SNS、WebMail、写真共有サービスなど • 現在(アライドアーキテクツ) • Webアプリケーション開発全般を担当 • http://showcase.cool/ • 発表 • http://ll.jus.or.jp/2014/archives/slides
アジェンダ • 同期I/O、非同期I/O • Pythonの非同期フレームワーク • asyncio概要、サンプル
同期I/O コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの 送受信の完了を待ってから他の処理を開始する方式。 ! 同期I/Oでは、I/O処理が始まると他の処理はいったん停止し、送受信が完了 してから続きの処理を開始・継続する。これに対し、I/O処理と並列に、送受 信が完了していなくても可能な処理を進める方式を非同期I/O(ノンブロッキ ングI/O)という ! IT用語辞典 ( http://e-words.jp/w/E5908CE69C9FI2FO.html ) より
コーヒーショップ(同期版) • 注文する • 出来るのを待つ • 受け取る
非同期I/O コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの 送受信の完了を待たずに他の処理を開始する方式。並列処理の一種。 ! 非同期I/Oでは、I/O処理と並列に、データの送受信が完了していなくても可 能な処理を進め、送受信が済まないと進められない処理にたどりついた場合 に、そこで送受信の完了を待つ。これに対し、正常に送受信が完了したかど うかの結果を待ち、送受信処理に完了してから残りの処理を行う方式を同期I/ O(ブロッキングI/O)という。 IT用語辞典 ( http://e-words.jp/w/E5908CE69C9FI2FO.html ) より
コーヒーショップ(非同期版) • 注文する • 別の所で待つ • 準備が出来たら呼ばれて、受け取る
比較 同期版 非同期版高速化
どういう場合に使う? • IOの待ち時間が長い処理 • コネクションの取得 • 外部サービスの呼び出し • APIの呼び出し • 逆にCPUバウンドなプログラムには有効ではない
Pythonの非同期処理の選択肢 • twisted • tornado • gevent • thread、multi process、and etc…
Twisted • イベント駆動型のネットワークプログラミングフ レームワーク • TCP、UDP、SSL/TSL、などのサポート • 多数のプロトコルに対応(HTTP、SSH、FTP) • Deferred(遅延評価オブジェクト) • 外部イベントループとの結合
Tornado • Facebook( FriendFeed )が開発 • オープンソース • Webフレームワーク + 非同期通信ライブラリ • 非常に高速(先日のLTでも発表があり) • 現在でもよく使われている
選択肢が多い • 選択肢が多いのは素晴らしい • どれがスタンダードなのかわからない • APIのスタイルが違う • 結合しているイベントループの種類が違う
asyncio • PEP 3156 ( http://legacy.python.org/dev/peps/pep-3156/ ) • Python3.4から標準ライブラリ • 非同期i/oの共通のコンポーネントを提供 • Windows, Linuxをサポート • 既存のフレームワークを置き換えるのではなく、 補完する
アーキテクチャ • Event loop • Corutines • Future、Task
Event loop • プラットフォームに最適なIO処理を提供
イベントループの取得 • asyncio.get_event_loop() • asyncio.set_event_loop(loop) • asyncio.new_event_loop()
イベントループの実行、停止 • loop.run_forever() • loop.run_until_complete(future) • loop.is_running() • loop.stop() • loop.is_closed()
コールバック • loop.call_soon(callback,*args) • loop.call_later(delay, callback, *args) • loop.call_at(when, callback, *args) • loop.time()
ファイルディスクリプタ • loop.add_reader(fd, callback, *args) • loop.remove_reader(fd) • loop.add_writer(fd, callback, *args) • loop.remove_writer(fd)
UNIX シグナル • loop.add_signal_handler(signum, callback, *args) • loop.remove_signal_handler(sig)
他にもたくさん • http://docs.python.jp/3/library/asyncio.html
Hello World import asyncio ! def print_and_repeat(loop): print('Hello World') loop.call_later(2, print_and_repeat, loop) ! loop = asyncio.get_event_loop() loop.call_soon(print_and_repeat, loop) loop.run_forever() http://docs.python.jp/3/library/asyncio-eventloop.html#example-hello-world-callback
Signal Sample import asyncio import functools import os import signal ! def ask_exit(signame): print("got signal %s: exit" % signame) loop.stop() ! loop = asyncio.get_event_loop() for signame in ('SIGINT', 'SIGTERM'): loop.add_signal_handler(getattr(signal, signame), functools.partial(ask_exit, signame)) ! print("Event loop running forever, press CTRL+c to interrupt.") print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid()) loop.run_forever() http://docs.python.jp/3/library/asyncio-eventloop.html#example-set-signal-handlers-for-sigint-and-sigterm
Coroutines • generator • @asyncio.coroutine • 任意の箇所で一旦処理を中止し、処理を再開
Coroutine Sample import asyncio ! @asyncio.coroutine def greet_every_two_seconds(): while True: print('Hello World') yield from asyncio.sleep(2) ! loop = asyncio.get_event_loop() loop.run_until_complete(greet_every_two_seconds()) http://docs.python.jp/3/library/asyncio-task.html#example-hello-world-coroutine
Chain Coroutines import asyncio ! @asyncio.coroutine def greet_every_two_seconds(): while True: print('Hello World') yield from asyncio.sleep(2) ! loop = asyncio.get_event_loop() loop.run_until_complete(greet_every_two_seconds()) http://docs.python.jp/3/library/asyncio-task.html
Future • 呼び出し可能オブジェクトの非同期実行をカプ セル化 • future.add_done_callback() => 登録 • future.result() => 結果の取得
実際はどう使う? • aiohttp( https://github.com/KeepSafe/aiohttp )
aiohttp @asyncio.coroutine def request(method, url, *, params=None, data=None, headers=None, cookies=None, files=None, auth=None, allow_redirects=True, max_redirects=10, encoding='utf-8', version=aiohttp.HttpVersion11, compress=None, chunked=None, expect100=False, connector=None, loop=None, read_until_eof=True, request_class=None, response_class=None):
aiohttp response = yield from aiohttp.request('GET', 'http://python.org') body = yield from response.read() print(body)
まとめ • まずはEventloop、Coroutine、Futureを覚える • スレッドなどに比べて概念が難しい(個人的に) • 徐々にasyncioをベースにした実装が出てくるはず。
ご静聴ありがとうございました。

Recommended

PDF
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
PPTX
パワポ版の落合先生流論文要旨のテンプレートを作ったので配布する
PDF
【DL輪読会】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
PPTX
カルマンフィルタ入門
PDF
【DL輪読会】Mastering Diverse Domains through World Models
PPTX
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
PPTX
StyleGAN解説 CVPR2019読み会@DeNA
PDF
BERTをブラウザで動かしたい! ―MobileBERTとTensorFlow.js―
PDF
機械学習をScrumで組織的に学習する (RSGT2022)
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
PPTX
優れた研究論文の書き方―7つの提案
PDF
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
PDF
グラフデータの機械学習における特徴表現の設計と学習
PPTX
卒論執筆・スライド作成のポイント
PDF
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
PPTX
報酬設計と逆強化学習
PPTX
Sequence Level Training with Recurrent Neural Networks (関東CV勉強会 強化学習論文読み会)
PPTX
MS COCO Dataset Introduction
PDF
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
PDF
【DL輪読会】Motion Policy Networks
PDF
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
PDF
Skip Connection まとめ(Neural Network)
PDF
『データ解析におけるプライバシー保護』勉強会 秘密計算
PDF
研究分野をサーベイする
PDF
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
PDF
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
PDF
トピックモデルの評価指標 Perplexity とは何なのか?
 
PDF
できる!並列・並行プログラミング
PDF
Project Loom - 限定継続と軽量スレッド -

More Related Content

PDF
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
PPTX
パワポ版の落合先生流論文要旨のテンプレートを作ったので配布する
PDF
【DL輪読会】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
PPTX
カルマンフィルタ入門
PDF
【DL輪読会】Mastering Diverse Domains through World Models
PPTX
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
PPTX
StyleGAN解説 CVPR2019読み会@DeNA
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
パワポ版の落合先生流論文要旨のテンプレートを作ったので配布する
【DL輪読会】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
カルマンフィルタ入門
【DL輪読会】Mastering Diverse Domains through World Models
[DL輪読会]EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks
StyleGAN解説 CVPR2019読み会@DeNA

What's hot

PDF
BERTをブラウザで動かしたい! ―MobileBERTとTensorFlow.js―
PDF
機械学習をScrumで組織的に学習する (RSGT2022)
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
PPTX
優れた研究論文の書き方―7つの提案
PDF
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
PDF
グラフデータの機械学習における特徴表現の設計と学習
PPTX
卒論執筆・スライド作成のポイント
PDF
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
PPTX
報酬設計と逆強化学習
PPTX
Sequence Level Training with Recurrent Neural Networks (関東CV勉強会 強化学習論文読み会)
PPTX
MS COCO Dataset Introduction
PDF
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
PDF
【DL輪読会】Motion Policy Networks
PDF
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
PDF
Skip Connection まとめ(Neural Network)
PDF
『データ解析におけるプライバシー保護』勉強会 秘密計算
PDF
研究分野をサーベイする
PDF
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
PDF
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
PDF
トピックモデルの評価指標 Perplexity とは何なのか?
 
BERTをブラウザで動かしたい! ―MobileBERTとTensorFlow.js―
機械学習をScrumで組織的に学習する (RSGT2022)
フロー効率性とリソース効率性、再入門 #devlove #devkan
優れた研究論文の書き方―7つの提案
[part 2]ナレッジグラフ推論チャレンジ・Tech Live!
グラフデータの機械学習における特徴表現の設計と学習
卒論執筆・スライド作成のポイント
【論文調査】XAI技術の効能を ユーザ実験で評価する研究
報酬設計と逆強化学習
Sequence Level Training with Recurrent Neural Networks (関東CV勉強会 強化学習論文読み会)
MS COCO Dataset Introduction
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
【DL輪読会】Motion Policy Networks
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
Skip Connection まとめ(Neural Network)
『データ解析におけるプライバシー保護』勉強会 秘密計算
研究分野をサーベイする
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
トピックモデルの評価指標 Perplexity とは何なのか?
 

Similar to Pythonによる非同期プログラミング入門

PDF
できる!並列・並行プログラミング
PDF
Project Loom - 限定継続と軽量スレッド -
PPTX
非同期処理の基礎
PDF
async/await不要論
PDF
Node.js入門
PPT
PDF
async/await の向こう側 PyCon Kyushu 2022
PDF
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
PDF
Pythonの非同期処理を始める前に
PDF
10080分でPythonからIP Messeneger
PDF
[Basic 8] プロセスとスレッド / 入出力 / シェル
PDF
C21 SQL Server のスレッド管理 by 古賀啓一郎
KEY
難しそうで難しくない少し難しいClojure並行処理
PDF
Unix architecture
PDF
DATUM STUDIO PyCon2016 Turorial
PDF
dofilewrite and vn_write
PDF
C-langage
PDF
18166746-NeverBlock-RubyKaigi2009
PDF
LLdeade Python Language Update
PPTX
Too difficult concurrent processing
できる!並列・並行プログラミング
Project Loom - 限定継続と軽量スレッド -
非同期処理の基礎
async/await不要論
Node.js入門
async/await の向こう側 PyCon Kyushu 2022
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
Pythonの非同期処理を始める前に
10080分でPythonからIP Messeneger
[Basic 8] プロセスとスレッド / 入出力 / シェル
C21 SQL Server のスレッド管理 by 古賀啓一郎
難しそうで難しくない少し難しいClojure並行処理
Unix architecture
DATUM STUDIO PyCon2016 Turorial
dofilewrite and vn_write
C-langage
18166746-NeverBlock-RubyKaigi2009
LLdeade Python Language Update
Too difficult concurrent processing

Pythonによる非同期プログラミング入門


[8]ページ先頭

©2009-2025 Movatter.jp