0

は、私は、フォームPythonのマルチプロセッシング速度の問題

while x<lat2[0]: 
    while y>lat3[1]: 
     if (is_inside_nepal([x,y])): 
      print("inside") 
     else: 
      print("not") 
     y = y - (1/150.0) 
    y = lat2[1] 
    x = x + (1/150.0) 
#here lat2[0] represents a large number 

のネストされたforループは今、これは通常を実行するための周り50代を取る持っています。 そして私はこのループをマルチプロセッシングコードに変更しました。

def v1find_coordinates(q): 
    while not(q.empty()): 

    x1 = q.get() 
    x2 = x1 + incfactor 
    while x1<x2: 
     def func(x1): 
      while y>lat3[1]: 
       if (is_inside([x1,y])): 
        print x1,y,"inside" 
       else: 
        print x1,y,"not inside" 
       y = y - (1/150.0) 

     func(x1) 
     y = lat2[1] 
     x1 = x1 + (1/150.0) 

incfactor = 0.7 
xvalues = drange(x,lat2[0],incfactor) 
#this drange function is to get list with increment factor as decimal 
cores = mp.cpu_count() 
q = Queue() 
for i in xvalues: 
    q.put(i) 
for i in range(0,cores): 
    p = Process(target = v1find_coordinates,args=(q,)) 
    p.start() 
    p.Daemon = True 
    processes.append(p) 
for i in processes: 
    print ("now joining") 
    i.join() 

このマルチプロセッシングコードも周りに50年代の実行時間かかります。つまり、の間に時間差はありません。

また、プールを使用しようとしました。私はチャンクサイズも管理しています。私はグーグルと他のstackoverflowを検索している。しかし、満足のいく答えを見つけることはできません。

私が見つけることができる唯一の答えは、の両方の結果を得るためにプロセス管理で時間がとられました。これが理由なら、どうすればより高速な結果を得るためにマルチプロセッシング作業を行うことができますか?

PythonのCで実装すると、より高速な結果が得られますか?

私は劇的な結果は期待していませんが、常識的に4コアでの実行は1コアでの実行よりもはるかに速いはずです。しかし、私は同様の結果を得ています。どんな種類の助けにも感謝します。

+0

がキュー多分スレッドキュー(インポートキュー)の代わりに、マルチプロセッシングです1? (マルチプロセッシングのインポートキューから) –

+0

私はまだ自分自身でマルチプロセッシングを学んでいますが、マルチスレッドを使用している場合、そのプロセッサを中心とするタスクは何も得られません。私はあなたがプールを前に使ったと言ったのを知っていますが、もう一度それを調べるかもしれません。 –

+0

@HugoWalterいいえインポートキューがありません –

答えて

0

スレッドキュー(キューのインポートキューから)を使用しているようです。プロセスがフォークを(使用していますので、これは期待通りに動作しない)、それは各ワーカー・プロセスにキュー全体を複製し

用途:

from multiprocessing import Queue

+0

私は多重処理のインポートキューからインポートキューを行っていません –

関連する問題