kuroko/test/testThreading.krk
2021-04-02 16:02:05 +09:00

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)