0
ためのより遅いです:concurrent.futures.ThreadPoolExecutorは私がconcurrent.futures対リストの内包表記を使用して些細な機能をテストしてるリストの内包
class Test:
@staticmethod
def something(times = 1):
return sum([1 for i in range(times)])
@staticmethod
def simulate1(function, N):
l = []
for i in range(N):
outcome = function()
l.append(outcome)
return sum(l)/N
@staticmethod
def simulate2(function, N):
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
l = [outcome for outcome in executor.map(lambda x: function(), range(N))]
return sum(l)/N
@staticmethod
def simulate3(function, N):
import concurrent.futures
l = 0
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
futures = [executor.submit(function) for i in range(N)]
for future in concurrent.futures.as_completed(futures):
l += future.result()
return l/N
def simulation():
simulationRate = 100000
import datetime
s = datetime.datetime.now()
o = Test.simulate1(lambda : Test.something(10), simulationRate)
print((datetime.datetime.now() - s))
s = datetime.datetime.now()
o = Test.simulate2(lambda : Test.something(10), simulationRate)
print((datetime.datetime.now() - s))
s = datetime.datetime.now()
o = Test.simulate3(lambda : Test.something(10), simulationRate)
print((datetime.datetime.now() - s))
simulation()
は測定時間、私が取得:
0:00:00.258000
0:00:10.348000
0:00:10.556000
並行処理を開始しているので、スレッドがより速く実行されるのを防ぐボトルネックは何か分かりません。
私は理解しています、ありがとう! – edoedoedo