• 日本語
    • English (英語)
Avintonジャパン株式会社Avintonジャパン株式会社Avintonジャパン株式会社Avintonジャパン株式会社
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
    • プライベートクラウド
    • AIサービス開発
    • AI画像解析 – 無償PoC
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
  • 採用情報
    • Avintonで働く魅力
    • 新卒採用
    • プロジェクトコーディネーター職紹介
    • 求人
    • よくある質問
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ

Pythonによるマルチスレッドプログラミング実践

  • Python3.8 と OpenCV のインストール (Ubuntu20.04LTS)
  • ルーティング
  • postgreSQLへのshp fileのimport
  • NAT
  • PostGIS exercise
  • 三目並べ – 2.〇×を交互にゲーム盤に入るようにしよう
  • Docker 概要とセットアップ
  • 三目並べ – 3.勝敗がつくようにしよう
  • Docker Engineのubuntu上へのinstall
  • EC2からS3へ自動でぽいぽいアップロードするスクリプトの作成
  • 三目並べ – 4.「スタート」「リセット」ボタンをつけよう
  • 三目並べ – 5.先攻後攻を決めて、コンピュータ対戦にしよう(前編)
  • Apache Zeppelin 基本機能
  • Ruby on Rails を MySQLでセットアップ
  • 機械学習入門者向け Support Vector Machine (SVM) に触れてみる
  • AWSアカウントの作成と必ずやるべきセキュリティ対策
  • Scala 基礎
  • VLAN
  • Apache Spark 基礎
  • 機械学習を用いた画像分類
  • Ruby on Railsによる簡単なウェブアプリケーション
  • 正規表現とパイプ
  • 機械学習エンジニアに必要なスキル
  • Docker, Kubernetesの学び方について
  • Ubuntuの基本設定
  • PostgreSQL Setup
  • REDIS
  • Amazon EC2 インスタンスの初期設定をしよう
  • 軽量版Kubernetesディストリビューション – k0s クラスターの構築
  • Pythonの設定
  • GNS3のセットアップ
  • viエディタ
  • AWSのEC2インスタンスでWordPressブログを公開してみよう
  • Pythonでデータベースを操作する
  • Python2.7とOpenCVのインストール
  • ファイル操作コマンド
  • OpenCVのテストプログラム
  • グループとユーザー
  • Pythonで画像を分類するプログラムを作成する
  • AWS CLIをインストールしてコマンド操作しよう
  • Virtualisation and Container (仮想化とコンテナ) – Ansible, Docker and Kubernetes
  • Windows Server 2012 R2 Hyper-V
  • 困った時に使うコマンド
  • SparkMLによるKaggle Titanic生存者予測
  • PacketTracerのセットアップ
  • 一般グループのユーザーとグループ
  • AWS Route 53を使って独自ドメインのWebページを表示させてみよう
  • Kubernetesクラスター上へのOpenVINOモデルサーバーを使用したサンプルアプリケーションのデプロイ
  • プライバシーポリシー
  • VMware ESXi サーバー構築
  • 三目並べ – 6.先攻後攻を決めて、コンピュータ対戦にしよう(後編)
  • フロントエンド開発のための環境構築
  • フロントエンドのデモンストレーション
  • APIのデモンストレーション
  • CISCO 1800ルータセットアップ
  • ファイル検索コマンド
  • ESXi – Switchの追加とVLAN
  • 質問
  • 仮想化環境のディスク容量を拡張する
  • ユーザー権限とアクセス権
  • 三目並べ – 0.導入
  • テキスト処理
  • ESXi – VyOS
  • データベースへのデータロード
  • 機械学習入門者向け Naive Bayes(単純ベイズ)アルゴリズムに触れてみる
  • CCNA
  • ESXi – 小規模ネットワーク 構築
  • ファイル管理
  • 機械学習入門者向け ChainerRLでブロック崩しの学習
  • AWS CLIを使ってEC2のファイルをS3へアップロードしよう
  • Apache NiFiの環境設定
  • CSV import & export – Node.js, mySQL – 1
  • 機械学習入門者向け ランダムフォレストによる Kaggle Titanic生存者予測
  • NodeJSでWebアプリケーション開発 – Socket.IO編
  • CSV import & export – Node.js, mySQL – 2
  • Apache NiFi データパイプライン基礎
  • PCからルータ、スイッチへのSSH接続設定
  • 【Python入門】Python Numpy チュートリアル
  • SQL 便利な関数
  • PostgreSQLによるデータ分析
  • Apache NiFi Exercise
  • 機械学習入門者向け 分類と回帰の違いをプログラムを書いて学ぼう
  • NodeJSでWebアプリケーション開発 – React編
  • Pythonによるマルチスレッドプログラミング実践
  • Apache SparkとApache Zeppelinの概要と環境構築
  • Certbotを使ってSSL証明書を発行し、HTTP通信を暗号化しよう
  • DockerとApacheを使ってWebサーバーを構築しよう
  • NodeJSでWebアプリケーション開発 – React編
  • Redux基礎 – 主要な概念と用語
  • AmazonEC2とVPCでネットワークとサーバーを構築しよう
  • AWS入門者向け 初心者が最初に理解すべきEC2とVPCの基本的な用語解説
  • Linuxとは
  • Pandasによる構造化データ分析
  • ダイナミックルーティング
  • PostgreSQL – Python – Apache – Bootstrap
  • 三目並べ – 1.ゲーム盤を作ろう
Home Avintonアカデミー Pythonによるマルチスレッドプログラミング実践
python

プログラムは実行される際、プロセスという単位で実行領域がメモリ上に割り当てられ、処理が順次実行されていきます。(逐次処理)
マルチスレッドプログラミングとは、プロセスの中の処理を複数のスレッドに分割することで、片方のスレッドがネットワークの応答待ちなど、計算領域を効率よく使えていない時間にも別の処理を進めることができ、実行速度やプログラム構造の改善をすることができます。(並列処理)

タスクの流れ

1.任意のWebサイトへアクセスするWebクローラーの作製。
2.逐次処理により、複数の異なるWebサイト(10サイト程度)にクローリングを行い、終了までの所要時間を計測。
3.並列処理により、2で対象としたWebサイトにクローリングを行い、終了までの所要時間を計測。
4.横軸を並列処理に用いたスレッド数N(スレッド)、縦軸を処理時間T(秒)としたプロットを作成(Nは15程度)

STEP 1. Webクローラーの作製

適当なpythonのライブラリを用い、URLを引数として対象WebサイトのHTMLを返すWebクローラーを作製します。
クローラー用のライブラリはurllib, requestsなどたくさんの種類がありますので、使いやすいものを選択します。

STEP 2. 逐次処理によるクローリング

10個の異なるWebサイトのURLに対し、STEP 1で作製したクローラーを用いて処理終了までの所要時間を計測します。
Hint: Pythonのlistやtupleなどに対象となる複数のURLを格納し、forループを回します。

STEP 3. 並列処理によるクローリング

STEP 2 で用いたURLに対し、STEP 1で作製したクローラーを用いて処理終了までの所要時間を計測します。
但し、今回は適当なPythonのライブラリを用いて並列処理を行います。使用するスレッド数は4とします。
並列処理用のライブラリにはthreading, joblibなどたくさんの種類がありますので、使いやすいものを選択します。
Hint: 並列処理をするためには、クローラーの入力がどのような形でなければならないか注意しましょう。

STEP 4. スレッド数 vs. 処理時間のグラフの作製

並列処理に使用するスレッド数を変えて(1から15程度まで)、STEP 3を行います。
横軸をスレッド数N、縦軸を所要時間T(秒)とし、グラフにプロットします。
Hint: 各スレッド数に対する結果は、一旦外部に保存しておくと作業がしやすいかもしれません。

CHALLENGE

● マルチスレッド(並列処理)と似たものにマルチプロセス(並行処理)というものがあります。マルチスレッドはCPU(コア)内で複数のスレッドを高速に繰り返しており、厳密な意味で処理が同時に実行されていません。
一方、マルチプロセス(並行処理)はCPU(コア)単位で処理が実行されるため複数の処理を同時に実行させることができます。STEP4のコードをマルチプロセス(並行処理)で実装し、マルチスレッドとの違い、それぞれのメリット、デメリットを考えてください。またプロセスベースの並列処理ページのマネージャーの項目を参考にプロセス間でオブジェクトを共有してください。

● さらなる速度アップのための方法の一つとして、REDISを利用することが挙げられます。
HDDとのデータのやり取りは処理速度が遅いですが、それに比べ、インメモリデータベースであるREDISへのデータアクセスは非常に高速となるからです。
マルチスレッドプログラムでデータを格納していた部分を、REDISへの格納に変更してください。(REDISに格納したデータはbytes型になるので注意しましょう。)
さらに、指定したワードが見つかったURLをREDISとPostgresに格納し、両方から保存されたデータに照会してみてください。

前へ

採用情報

採用情報

Avinton SDGs

SDGsへの貢献

Search

タグ

AI AI Big Data Big Data ccna Digital Transformation DX IoT IoT LPIC Python Ruby SDGs Webエンジニア イベント インタビュー インフラエンジニア エンジニア オンラインセミナー キャリアチェンジ コンテナ技術 サーバーエンジニア システム開発 データサイエンス データベース データ分析 データ解析 ネットワークエンジニア ビックデータ 人工知能 仮想化 勉強会 営業 就職活動 技術インターン 採用 新卒 新卒採用 新規事業 機械学習 派遣 深層学習 社員インタビュー 経営者交流会 転職
© 2022 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
    • プライベートクラウド
    • AIサービス開発
    • AI画像解析 – 無償PoC
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
  • 採用情報
    • Avintonで働く魅力
    • 新卒採用
    • プロジェクトコーディネーター職紹介
    • 求人
    • よくある質問
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
  • 日本語
    • English (英語)
Avintonジャパン株式会社