2016-04-15 8 views
0

最近私はPython用のマルチプロセッシングを発見したので、私はそれをちょっとやって遊んでいます。Pythonマルチプロセッシングがループを拒否する

これは、私が働いているスクリプトです:すべては、私は、コードを実行すると、それはp_defを起動するが、それが終わると、再びそれを実行したい場合、それはに走るうまく機能

import multiprocessing, time 

def p_def(): 
     print "running p" 
     time.sleep(5) 

def v_def(): 
     print "running v" 
     time.sleep(5) 

p = multiprocessing.Process(target=p_def) 
v = multiprocessing.Process(target=v_def) 

while True: 
     time.sleep(0.25) 
     p.start() 
     while p.is_alive() == True: 
       time.sleep(0.5) 
       print "waiting for it to finish" 

このエラーを私に出力します:

running p 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
waiting for it to finish 
Traceback (most recent call last): 
    File "proc.py", line 19, in <module> 
    p.start() 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 120, in start 
    assert self._popen is None, 'cannot start a process twice' 
AssertionError: cannot start a process twice 

これは私にとって少し奇妙なものです。私が理解していることは、それをもう一度実行できるはずだが、オンラインで見ていることは、同じことを2回実行できないと言っているということだ。

真実は何ですか?それを2回実行させるにはどうすればよいですか?

+0

直接ビジー待ちのプロセスが終了するため、質問に関連し、代わりのない、あなたは(そしておそらく必要があります) 'p.join()'関数を使用することができます。 –

答えて

2

オブジェクトpを再作成する必要があります。プロセスは1回だけ起動できます。 (https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process.start

import multiprocessing, time 

def p_def(): 
     print "running p" 
     time.sleep(5) 

def v_def(): 
     print "running v" 
     time.sleep(5) 

v = multiprocessing.Process(target=v_def) 

while True: 
     time.sleep(0.25) 
     p = multiprocessing.Process(target=p_def) 
     p.start() 
     while p.is_alive() == True: 
       time.sleep(0.5) 
       print "waiting for it to finish" 
関連する問題