0
比方說,我測試了下面的代碼,看看子進程池的行爲:困惑關於蟒蛇位置參數,像ARGS =(我)
# 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)))"
。逗號離開,但產量爲:
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]
我找了蟒蛇的文件,發現第二個參數應該是一個元組,但是需要逗號?
是的,其實你讀得對。你需要一個元組,而'(something)'不是一個元組,它只是'something'。在另一種情況下,'(something,)'是一個只由一個元素組成的元組:'something'。 – iFlo
好吧,我現在3Q得到證實,就像@Carcigenicate說的那樣,對於翻譯來說是不明確的 – XpreZ