0
我觀察到啓動Python 3.5和Python 2.7之間的一系列進程的顯着時間增量。Python3和Python2之間的進程啓動持續時間
在下面的代碼中,如果CRITICAL = 8:perf在Py2和Py3中幾乎相同(< 1s)。但是對於9+,Py2中的perf保持不變,而在Py3中則是最差的(〜1min!)。
它似乎掛成參數我給要處理的大小...
UPDATE:它也與模塊的位置。事實上,如果它從「C:\」(或短路徑)運行,那麼Py3與Py2類似。但是,如果從很長的路徑運行,Py3中的perf會降級,而Py2中的perf會保持不變。
from __future__ import print_function
from multiprocessing import Process
import time
import itertools
def workerTask(inputs):
for _ in itertools.product(*inputs):
pass
if __name__ == '__main__':
CRITICAL = 9 # OK for 8-, KO for 9+
start = time.time()
ARGS = [["123.4567{}".format(i) for i in range(CRITICAL)] for _ in range(10)]
workerPool = [Process(target=workerTask, args=(ARGS,)) for _ in range(15)]
for idx, w in enumerate(workerPool):
print("...Starting process #{} after {}".format(idx + 1, time.time() - start))
w.start()
print("ALL PROCESSES STARTED in {}!".format(time.time() - start))
可以運行使用Unix的'time'命令相同的例子代碼?你能重寫你的代碼,以便可以執行它並重現該問題嗎? TX! – amirouche
@Vince這段代碼需要大量的重新編譯才能運行所有這些'self'並且缺少導入。請提供一個[mcve]或者你不會得到任何答案... –
我會盡量做一個最小的例子,但在做這個之前,我想知道是否有什麼我不知道在python3解釋這個delta時間相同的代碼。 – Vince