49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
|
import os
|
||
|
if 'KUROKO_TEST_ENV' in os.environ:
|
||
|
return 0
|
||
|
|
||
|
let Thread
|
||
|
try:
|
||
|
from threading import Thread as _Thread
|
||
|
Thread = _Thread
|
||
|
except:
|
||
|
print("Threading is not available.")
|
||
|
return 0
|
||
|
|
||
|
class Summer(Thread):
|
||
|
def __init__(self, lst, min, max):
|
||
|
self.lst = lst
|
||
|
self.min = min
|
||
|
self.max = max
|
||
|
self.result = None
|
||
|
def run(self):
|
||
|
self.result = 0
|
||
|
for i = self.min; i < self.max; i++:
|
||
|
self.result += self.lst[i]
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
import kuroko
|
||
|
let numThreads = 10
|
||
|
if len(kuroko.argv) > 1:
|
||
|
numThreads = int(kuroko.argv[1])
|
||
|
print("Starting {} threads.".format(numThreads))
|
||
|
let threads = []
|
||
|
let totalCount = 5000000
|
||
|
let chunkSize = totalCount / numThreads
|
||
|
let numbers = list(range(totalCount))
|
||
|
let cnt = 0
|
||
|
if totalCount > chunkSize * numThreads:
|
||
|
chunkSize += 1
|
||
|
for i in range(numThreads):
|
||
|
let newThread = Summer(numbers, cnt, (cnt + chunkSize) if (cnt + chunkSize < totalCount) else totalCount)
|
||
|
threads.append(newThread)
|
||
|
newThread.start()
|
||
|
cnt += chunkSize
|
||
|
|
||
|
let total = 0
|
||
|
for thread in threads:
|
||
|
thread.join()
|
||
|
total += thread.result
|
||
|
|
||
|
print("Got",total)
|