Python 学習:multiprocessing モジュール(改)

2014-11-17 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、3日前とランクは変わらず。
5、2、0、1、1、 0、0、0、0、0(41)で、換算ポイント 72pt 。
だが、相変わらず「C言語」「Firefox」「化学業界」「グルコサミン」のbg値が、
毎日の如く変動。
・-・ - -・

さて、本文。

10日前(2014-11-07)の記事:
Python 学習:multiprocessing モジュール
で、書いたコードには、
無意味”な部分があった。

最後のコード例:
  ・・・・・
  ・・・・・
  そこにある“Manager()”クラスを使った例を元に、

from multiprocessing import Process, Manager
import time
import numpy as np

def Proc( i, A, s ): # 一般のスカラ、アレイ(戻り値用)、リスト(入力)
time.sleep(0.01*i)
print s[i]
A[i] = len( s[i] )

if __name__ == "__main__":
manager = Manager()
ST = [ 'a', 'bb', 'ccc', 'dddd' ]
pp = len(ST)
s = manager.list( ST ) # 子に渡す=グローバル変数の代わり
A = manager.Array( 'i', [0]*pp ) # 子からの戻り値用
for i in range(pp):
p = Process( target=Proc, args=( i, A, s ) )
p.start(); p.join()
VT = np.array(A)
print( VT ); time.sleep(3)


  の様にコーディングした。
  ・・・・・
  ・・・・・


ここにある:

for i in range(pp):
p = Process( target=Proc, args=( i, A, s ) )
p.start(); p.join()


の部分、
即ち、ループ内で
「p.start()」に続けて「p.join()」とすることは、
並列化の意味が無いことが分かった。


(並列処理を)キチント行うには、
以下の様にすべきであった。(一例)

pT = range(pp)   # 配列の予約(一例)
for i in range(pp):
pT[i] = Process( target=Proc, args=( i, A, s ) )
for p in pT: p.start()
for p in pT: p.join()


全部「.start」しておいて、
その後、
徐(おもむろ)に「.join」すべき。
だった!!!


本日はここまで。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


141021
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク