1

私はマルチプロセッシングが私にとって新しいものだと言います。私はそれについていくつか読んだが、それは私をもっと混乱させる。私は簡単な例でそれを理解したい。最初の関数に2つの関数があると仮定しましょう。変数 'a'をインクリメントして 'number'変数に代入します。次に、最初に関数を開始し、1秒ごとに 'number'変数を出力します。次のようになります。Pythonでの並列処理の簡単な例

global number 

def what_number(): 
    a=1 
    while True: 
     a+=1 
     number=a 

def read_number(): 
    while True: 
     --> #here I need to start 'what_number' function <-- 
     time.sleep(1) 
     print(number) 


if __name__ == "__main__": 
    read_number() 

どうすればいいですか?それを行うための簡単かつ適切な方法はありますか?

UPDATE:

私は本当にthankfullだが、それは私がしたい正確に何でないnoxdafox答えを見ました。まず第一に、私は最初の関数(noxdafoxコードの 'main')に値を送ることは望ましくありません。二番目に私はすべての価値を得たくないので、クーネはうまくいかないでしょう。 whileループの2番目のそれぞれの後に取得する必要があります。 uは上記のコードを実行した場合、あなたが何かを得る

import multiprocessing 
import time 

number = 0 


def child_process(): 
    global number 
    while True: 
     number += 1 
     print(number) 


def main(): 
    process = multiprocessing.Process(target=child_process) 
    process.start() 

    while True: 
     print("should get same number:",number) 
     time.sleep(0.001) 

if __name__ == "__main__": 
    main() 

enter image description here

をしかし、この青の値が同じである必要があり、選択したコードのようなものでなければなりません!それが一番の問題だ:)混沌

+0

http://chriskiehl.com/article/parallelism-in-one-line/ – user45245

+0

グローバル番号? – alfasin

+1

[multiprocessing.Pool:applyを使用する場合は、\ _asyncまたはmapを適用しますか?](https://stackoverflow.com/questions/8533318/multiprocessing-pool-when-to-use-apply-apply-async-または – alfasin

答えて

0

これは時間がかかりますが、わかりました。すべてそれは約Sharing state between processesだった今すべてそれは魅力のように動作します。コード:

from multiprocessing import Process, Value 
import time 


def child_process(number): 
    number.value = 0 
    while True: 
     number.value += 1 
     #print(number) 


def main(): 
    num = Value('i') 
    process = Process(target=child_process, args=(num,)) 
    process.start() 
    while True: 
     print("should get same number:", num.value) 
     time.sleep(1) 

if __name__ == "__main__": 
    main() 
0

のプロセスが別のメモリアドレス空間に住んでいるとして、あなたは変数を共有することができないため

P.S申し訳ありません。さらに、グローバル変数を間違って使用しています。 Hereグローバル変数の使用方法の例を見ることができます。

プロセス間で情報を共有する最も簡単な方法は、PipeまたはQueueです。

import multiprocessing 

def child_process(queue): 
    while True: 
     number = queue.get() 
     number += 1 
     queue.put(number) 

def main(): 
    number = 0 
    queue = multiprocessing.Queue() 
    process = multiprocessing.Process(target=child_process, args=[queue]) 
    process.start() 

    while True: 
     print("Sending %d" % number) 
     queue.put(number) 

     number = queue.get() 
     print("Received %d" % number) 

     time.sleep(1) 

if __name__ == "__main__": 
    main() 
+0

あなたの答えをありがとうが、この場合、私は1秒ごとに1ずつ増加します。ポイントはwhileループの数を得ることです。あなたは私が何を意味するのか知っていますか? – KyluAce

+0

whileループで数字が常に1秒増加している数値の値を取得することを意味します。 – KyluAce

+0

そのようなやり方がありますか? https://pastebin.com/ehMv1j1p?しかし今のところそれはすべての時間を与えている0 – KyluAce