2017-08-04 7 views
0

のは、私は、サブプロセスプールの行為を参照するには、次のコードをテストしたとしましょう:混乱についてのpython位置引数、引数のようなもの=(I)

# coding=utf-8 
import os 
import sys 
from multiprocessing import Pool 
import time 
import random 
def run_proc(param1): 
    print("child procees %s pid is %s,parent id is %s" % 
      (param1, os.getpid(), os.getppid())) 
    starttime = time.time() 
    time.sleep(random.random() * 3) 
    endtime = time.time() 
    print('child process %s runs %0.2f seconds.' % 
      (param1, (endtime - starttime))) 

if __name__ == '__main__': 
    print(sys.version) 
    pname = sys.argv[0].split('/')[-1] 
    print("process %s is running now...,it's pid is %s" % (pname, os.getpid())) 
    p = Pool(5) 
    for i in range(5): 
     p.apply_async(run_proc, args=("test"+str(i),)) 
    print("waiting for all subprocess to end...") 
    p.close() 
    p.join() 
    print("all subprocesses are over!") 

そして、出力は私が期待されるものすべてだったこと:

3.5.0 (default, Jul 23 2017, 10:55:33) 
    [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] 
    process mp_basic_pool.py is running now...,it's pid is 19352 
    waiting for all subprocess to end... 
    child procees test0 pid is 19367,parent id is 19352 
    child procees test1 pid is 19368,parent id is 19352 
    child procees test2 pid is 19369,parent id is 19352 
    child procees test3 pid is 19370,parent id is 19352 
    child procees test4 pid is 19371,parent id is 19352 
    child process test2 runs 0.93 seconds. 
    child process test4 runs 1.33 seconds. 
    child process test3 runs 1.68 seconds. 
    child process test0 runs 2.68 seconds. 
    child process test1 runs 2.90 seconds. 
    all subprocesses are over! 
    [Finished in 3.2s] 

"p.apply_async(run_proc, args=("test"+str(i),))"があります。私がこのコードを初めて書いたとき、私は"p.apply_async(run_proc, args=("test"+str(i)))"と書いていました。コンマは左、しかしとして出力されました:私はPythonのドキュメントのために見て、2番目のパラメータはタプルであるべきことがわかったが、コンマが必要とされて

3.5.0 (default, Jul 23 2017, 10:55:33) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] 
process mp_basic_pool.py is running now...,it's pid is 19382 
waiting for all subprocess to end... 
all subprocesses are over! 
[Finished in 0.4s] 

+0

はい、実際に正しく読んでいます。タプルが必要です。ちょうど '(何か)はタプルではなく、ただのものです。もう一つのケースでは、 '(something、)'は一つの要素、 '何か 'だけで構成されるタプルです。 – iFlo

+1

ok、私は今、3Qのように@Carcigenicateが言ったように、それはインタプリタのために曖昧だ – XpreZ

答えて

1

単一要素のタプル(("test"+str(i),))は、かっこのペアから区別するために末尾のカンマを必要とします。

このように考えてみましょう:(x)の場合は、カンマなしで、グループ化にかっこを使用するのか、タプルを作成するのかを通訳者はどのように知っていますか?あいまいです。

関連する問題