2017-06-01 16 views
0

マルチプロセスプログラムを実行しようとしていますが、何らかの理由で同時にプロセスが開始せず、他のプロセスが終了するのを待っています。以下はコードの一部といくつかの出力です。アドバイスをお願いしますか? 私はWindows 10でPython 2.7を実行していますが、Python 3.5 Ubuntuと同じ結果をテストしました。両方のプロセスが同じ機能を実行しているにもかかわらず複数のpythonプロセスを同時に起動できません

私がちょうど良くCPU

import multiprocessing 
import time 
import os 

def function(x): 
    seq1 = x 
    index = 1 
    match = False 
    t = time.time() 

    while match == False: 
......................... 
     if k==6 : 
      match = True 

     index = index + 1 

def Main(): 
    x1=raw_input("Please enter first sequence: ") 
    seq1=[] 
    seq1 = x1.split(",") 

    p1 = multiprocessing.Process(target=function(seq1),) 
    p1.start() 
    p2 = multiprocessing.Process(target=function(seq1),) 
    p2.start() 

Main() 

出力を使用する場合、その結果が結ばれていないので、1が最初に終了している私にとっては問題ではありません(私が持っていますP1が終了するまで待機してからP2すること)を開始: P1は プロセスIDを開始しました:4520 マッチで見つかった:30401191の試み ( 'でP1によって行わ:')1072.0950000286102、 P2は プロセスIDを開始しました:4520 マッチで見つかりました:8665524試して ( 'によって完了P2 in: '、298.375)

+0

pythonは、そのプログラムを同期して実行します。したがって、同時に2つの機能を実行することはできません。しかし、あなたは[link](https://docs.python.org/3/library/threading.html#module-threading)_italic_ ** bold ** 'threading'とマルチプロセッシング –

+0

' k'はそうではありません定義されている.... –

+0

Windowsの場合は、モジュールの最上位レベルで 'Main'を呼び出さないでください。 [ドキュメント](https://docs.python.org/2/library/multiprocessing.html#windows)を参照してください。 –

答えて

2

multiprocessing.Processクラスのインターフェイスを誤って使用しています。関数をターゲットとして渡し、引数をリストに渡す必要があります。

ロジックが関数を呼び出して、その結果をプロセスのターゲットとして渡しています。

p1 = multiprocessing.Process(target=function, args=(seq1,)) 
p1.start() 
p2 = multiprocessing.Process(target=function, args=(seq1,)) 
p2.start() 
関連する問題