Suche senden
Hochladen
Pythonによる非同期プログラミング入門
•
47 gefällt mir
•
50,704 views
Hironori Sekine
Folgen
Pythonによる非同期プログラミング入門
Weniger lesen
Mehr lesen
Software
Melden
Teilen
Melden
Teilen
1 von 34
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
方策勾配型強化学習の基礎と応用
方策勾配型強化学習の基礎と応用
Ryo Iwaki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
スクレイピングとPython
スクレイピングとPython
Hironori Sekine
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
Pythonと型チェッカー
Pythonと型チェッカー
Tetsuya Morimoto
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Empfohlen
方策勾配型強化学習の基礎と応用
方策勾配型強化学習の基礎と応用
Ryo Iwaki
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
スクレイピングとPython
スクレイピングとPython
Hironori Sekine
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
【DL輪読会】Scaling Laws for Neural Language Models
【DL輪読会】Scaling Laws for Neural Language Models
Deep Learning JP
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
Pythonと型チェッカー
Pythonと型チェッカー
Tetsuya Morimoto
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
Deep Learning JP
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
(2018.3) 分子のグラフ表現と機械学習
(2018.3) 分子のグラフ表現と機械学習
Ichigaku Takigawa
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
Deep Learning JP
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
PEGで構文解析をする
PEGで構文解析をする
jiro4989
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
Megagon Labs
SFUの話
SFUの話
tnoho
位置データもPythonで!!!
位置データもPythonで!!!
hide ogawa
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
Shohei Taniguchi
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
C++による数値解析の並列化手法
C++による数値解析の並列化手法
dc1394
【DL輪読会】Mastering Diverse Domains through World Models
【DL輪読会】Mastering Diverse Domains through World Models
Deep Learning JP
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
Koichiro Mori
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
Masamitsu Maehara
Weitere ähnliche Inhalte
Was ist angesagt?
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
Deep Learning JP
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
mlm_kansai
(2018.3) 分子のグラフ表現と機械学習
(2018.3) 分子のグラフ表現と機械学習
Ichigaku Takigawa
分散システムの限界について知ろう
分散システムの限界について知ろう
Shingo Omura
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
Deep Learning JP
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
PEGで構文解析をする
PEGで構文解析をする
jiro4989
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
Megagon Labs
SFUの話
SFUの話
tnoho
位置データもPythonで!!!
位置データもPythonで!!!
hide ogawa
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
Shohei Taniguchi
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
C++による数値解析の並列化手法
C++による数値解析の並列化手法
dc1394
【DL輪読会】Mastering Diverse Domains through World Models
【DL輪読会】Mastering Diverse Domains through World Models
Deep Learning JP
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
ryosuke-kojima
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
Koichiro Mori
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Was ist angesagt?
(20)
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
(2018.3) 分子のグラフ表現と機械学習
(2018.3) 分子のグラフ表現と機械学習
分散システムの限界について知ろう
分散システムの限界について知ろう
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
【DL輪読会】Data-Efficient Reinforcement Learning with Self-Predictive Representat...
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
PEGで構文解析をする
PEGで構文解析をする
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
SFUの話
SFUの話
位置データもPythonで!!!
位置データもPythonで!!!
Control as Inference (強化学習とベイズ統計)
Control as Inference (強化学習とベイズ統計)
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
C++による数値解析の並列化手法
C++による数値解析の並列化手法
【DL輪読会】Mastering Diverse Domains through World Models
【DL輪読会】Mastering Diverse Domains through World Models
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Ähnlich wie Pythonによる非同期プログラミング入門
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
Masamitsu Maehara
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
Takeshi Komiya
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Pyconjp2014_implementations
Pyconjp2014_implementations
masahitojp
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
Naoki Shibata
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
yaegashi
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
Wataru MIYAGUNI
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
Pyconjp2016 pyftplib
Pyconjp2016 pyftplib
Shinya Okano
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
yuzorock
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
2bo 2bo
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
勉強会 Cvml python基礎
勉強会 Cvml python基礎
真哉 杉野
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
ShunyoKawamoto
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
Uchio Kondo
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
Kioto Hirahara
Ansible quickstart
Ansible quickstart
Hideki Saito
Ähnlich wie Pythonによる非同期プログラミング入門
(20)
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
Programming camp Codereading
Programming camp Codereading
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Pyconjp2014_implementations
Pyconjp2014_implementations
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Pyconjp2016 pyftplib
Pyconjp2016 pyftplib
hbstudy#6LTyuzorock
hbstudy#6LTyuzorock
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
勉強会 Cvml python基礎
勉強会 Cvml python基礎
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
OSSはどこまで産業用機器に使えるか_20230520.pdf
OSSはどこまで産業用機器に使えるか_20230520.pdf
Ansible quickstart
Ansible quickstart
Pythonによる非同期プログラミング入門
1.
Pythonによる 非同期プログラミング入門 関根裕紀
2.
自己紹介 • 関根裕紀(せきね
ひろのり) • アライドアーキテクツ株式会社 • ソフトウェア・エンジニア • Twitter(@checkpoint )
3.
経歴 • 前職まで
• RSSリーダー、SNS、WebMail、写真共有サービスなど • 現在(アライドアーキテクツ) • Webアプリケーション開発全般を担当 • http://showcase.cool/ • 発表 • http://ll.jus.or.jp/2014/archives/slides
4.
アジェンダ • 同期I/O、非同期I/O
• Pythonの非同期フレームワーク • asyncio概要、サンプル
5.
同期I/O コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの 送受信の完了を待ってから他の処理を開始する方式。
! 同期I/Oでは、I/O処理が始まると他の処理はいったん停止し、送受信が完了 してから続きの処理を開始・継続する。これに対し、I/O処理と並列に、送受 信が完了していなくても可能な処理を進める方式を非同期I/O(ノンブロッキ ングI/O)という ! IT用語辞典 ( http://e-words.jp/w/E5908CE69C9FI2FO.html ) より
6.
コーヒーショップ(同期版) • 注文する
• 出来るのを待つ • 受け取る
7.
非同期I/O コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの 送受信の完了を待たずに他の処理を開始する方式。並列処理の一種。
! 非同期I/Oでは、I/O処理と並列に、データの送受信が完了していなくても可 能な処理を進め、送受信が済まないと進められない処理にたどりついた場合 に、そこで送受信の完了を待つ。これに対し、正常に送受信が完了したかど うかの結果を待ち、送受信処理に完了してから残りの処理を行う方式を同期I/ O(ブロッキングI/O)という。 IT用語辞典 ( http://e-words.jp/w/E5908CE69C9FI2FO.html ) より
8.
コーヒーショップ(非同期版) • 注文する
• 別の所で待つ • 準備が出来たら呼ばれて、受け取る
9.
比較 同期版 非同期版高速化
10.
どういう場合に使う? • IOの待ち時間が長い処理
• コネクションの取得 • 外部サービスの呼び出し • APIの呼び出し • 逆にCPUバウンドなプログラムには有効ではない
11.
Pythonの非同期処理の選択肢 • twisted
• tornado • gevent • thread、multi process、and etc…
12.
Twisted • イベント駆動型のネットワークプログラミングフ
レームワーク • TCP、UDP、SSL/TSL、などのサポート • 多数のプロトコルに対応(HTTP、SSH、FTP) • Deferred(遅延評価オブジェクト) • 外部イベントループとの結合
13.
Tornado • Facebook(
FriendFeed )が開発 • オープンソース • Webフレームワーク + 非同期通信ライブラリ • 非常に高速(先日のLTでも発表があり) • 現在でもよく使われている
14.
選択肢が多い • 選択肢が多いのは素晴らしい
• どれがスタンダードなのかわからない • APIのスタイルが違う • 結合しているイベントループの種類が違う
15.
asyncio • PEP
3156 ( http://legacy.python.org/dev/peps/pep-3156/ ) • Python3.4から標準ライブラリ • 非同期i/oの共通のコンポーネントを提供 • Windows, Linuxをサポート • 既存のフレームワークを置き換えるのではなく、 補完する
16.
アーキテクチャ • Event
loop • Corutines • Future、Task
17.
Event loop •
プラットフォームに最適なIO処理を提供
18.
イベントループの取得 • asyncio.get_event_loop()
• asyncio.set_event_loop(loop) • asyncio.new_event_loop()
19.
イベントループの実行、停止 • loop.run_forever()
• loop.run_until_complete(future) • loop.is_running() • loop.stop() • loop.is_closed()
20.
コールバック • loop.call_soon(callback,*args)
• loop.call_later(delay, callback, *args) • loop.call_at(when, callback, *args) • loop.time()
21.
ファイルディスクリプタ • loop.add_reader(fd,
callback, *args) • loop.remove_reader(fd) • loop.add_writer(fd, callback, *args) • loop.remove_writer(fd)
22.
UNIX シグナル •
loop.add_signal_handler(signum, callback, *args) • loop.remove_signal_handler(sig)
23.
他にもたくさん • http://docs.python.jp/3/library/asyncio.html
24.
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
25.
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
26.
Coroutines • generator
• @asyncio.coroutine • 任意の箇所で一旦処理を中止し、処理を再開
27.
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
28.
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
29.
Future • 呼び出し可能オブジェクトの非同期実行をカプ
セル化 • future.add_done_callback() => 登録 • future.result() => 結果の取得
30.
実際はどう使う? • aiohttp(
https://github.com/KeepSafe/aiohttp )
31.
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):
32.
aiohttp response =
yield from aiohttp.request('GET', 'http://python.org') body = yield from response.read() print(body)
33.
まとめ • まずはEventloop、Coroutine、Futureを覚える
• スレッドなどに比べて概念が難しい(個人的に) • 徐々にasyncioをベースにした実装が出てくるはず。
34.
ご静聴ありがとうございました。
Jetzt herunterladen