タグ

Pythonと並列処理に関するsatoshieのブックマーク (6)

  • Pythonのマルチスレッドで気を付けるべきこと

    はじめに、この記事は「マルチスレッドで気を付けるべきnの項目」のような、よくまとまったまとめ記事ではないのでご了承ください。 とある条件でマルチスレッドの挙動が意図しないものになり、その後によくよく考えると「なるほど!」となったのでメモしておきます。 というか内容もあってるかわかりません、独自の考察です。詳しい人ツッコミください。 マルチスレッドで問題が発生する条件とある条件では、マルチスレッドを使ってしまうと意図しない挙動が発生すると思っています。 それはめちゃくちゃ重い、Pythonを考慮していないような外部ライブラリを使った場合です。 どういうことか、文字だけでうまく説明できる自信がないので、次のコードで説明しましょう。 ちなみに、今回の記事で説明する検証コードの完全版は以下のURLにアップしてありますので、よろしければご確認ください。 bonprosoft/python_multi

  • Python3.5で実装されたasync/awaitを使って軽量スレッドの性能ベンチマーク - Qiita

    Python3.5でasync/awaitが追加されていたのでメモリ消費量とコンテキストスイッチのコストの観点でベンチマークを取ってみました。 async/await構文とは 非同期処理やノンブロッキングI/O処理を良い感じに書ける非同期処理のパラダイムにおける最先鋭の構文です。C#に実装されたあと、C++,VB,Node.jsに実装されついにPythonにもやってきた!という感じです。特徴はいままでThreadingで頑張って書いてた非同期処理が、より簡潔により強力に書けるようになります。軽量スレッドとはマイクロスレッド、ファイバーとも呼ばれるもので、「C10K問題」(クライアント1万台問題)と言われるI/O待ちによってクライアント数が多いとハードウェアの性能が生かしきれない問題の解決策の1つです。I/O待ちの際に高速にコンテキストスイッチして他のクライアントを捌くことでハードウェアの性

    Python3.5で実装されたasync/awaitを使って軽量スレッドの性能ベンチマーク - Qiita
  • Python3のマルチプロセスPoolのメソッドはimap_unorderedを使うべし - Qiita

    Python3のマルチプロセスPoolのメソッドが沢山あってどれを使えばいいのか分からなかったので調べました。 map関数 map関数は全ての結果が出るまでブロックします。 コードを実行してみると from multiprocessing import Pool from time import sleep import time start = time.time() def do(waitTime): print("do waitTime:{} 開始から{}秒経過".format(waitTime,time.time() - start)) sleep(waitTime) return waitTime if __name__ == '__main__': waitTimes = [3,2,1] with Pool(10) as p: for result in p.map(do,wa

    Python3のマルチプロセスPoolのメソッドはimap_unorderedを使うべし - Qiita
  • Multiprocessingでクラス内変数が、どう変化するかの確認 - Qiita

    概要 Python3でクラスを定義して、メソッド中にクラス変数を書き換える手続きを記載しつつ、それをマルチプロセスで処理したらクラス変数がどうなるのかの確認。 クラスの割当→並列処理→計算 プログラム test_main.py #!/usr/bin/env python # vim:fileencoding=utf-8 #Author: Hamano TASUKE #Created: 2016-01-05 import sys from test_class import TestMultiProcess argvs = sys.argv argc = len(argvs) def calculate_helper(class_name, method_name, *args, **kwargs): return getattr(class_name, method_name)(*args

    Multiprocessingでクラス内変数が、どう変化するかの確認 - Qiita
  • multiprocessing.Poolがエラーになる人へ - aflcのブログ

    Pythonで並列プログラミングしようとしたときに真っ先に思い浮かぶのが threadingやmultitprocessingモジュールですよね。 multiprocessingにはPoolという便利なクラスがあって、同時に起動するプロセス数を 制限しながら処理を並列実行できたりします。 例: import multiprocessing as mulp def func(self, n): return n ** 3 pool = mulp.Pool() r = pool.map(func, range(10)) print r # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729] しかし、この時渡す関数funcがクラスのインスタンスメソッドだったり、匿名関数だったり、関数中で定義した関数だったり、した場合には エラーが出ます。 import mult

    multiprocessing.Poolがエラーになる人へ - aflcのブログ
  • Pythonでの並行処理と並列処理 - Qiita

    今回は自分なりに並行処理と並列処理を処理の方法の違いから使い分けをしてみたいと思います. プログラミング歴もQiitaへの投稿も経験が浅いので間違いや感想などあれば送っていただけると非常に励みになります. 環境 Ubuntu17.04 Python3.6.1 Intel core-i7 7500U 並行処理と並列処理の違い(基礎) https://docs.python.org/3/library/concurrency.html には並行処理を行うモジュールについて詳しく書いてあります. 並行処理(multi processing)と並列処理(multi threading)の違いというと,並行処理が今あるプロセスと別のプロセスを新たに起動し処理を行わせるのに対して,並列処理は今あるプロセスの中で複数のスレッドを立ち上げます. 料理でイメージすると,並行処理の立ち上げがそもそもの料理をす

    Pythonでの並行処理と並列処理 - Qiita
  • 1