Thread load
examples/threads/thread_load.py
import threading import sys import time import random results = [] locker = threading.Lock() class ThreadedCount(threading.Thread): def __init__(self, n): threading.Thread.__init__(self) self.n = n def run(self): count = 0 total = 0 while count < 40000000 / self.n: rnd = random.random() total += rnd count += 1 locker.acquire() results.append({'count': count, 'total': total}) locker.release() return def main(): if len(sys.argv) != 2: exit("Usage: {} POOL_SIZE") size = int(sys.argv[1]) start = time.time() threads = [ ThreadedCount(n=size) for i in range(size) ] [ t.start() for t in threads ] [ t.join() for t in threads ] print("Results: {}".format(results)) totals = map(lambda r: r['total'], results) print("Total: {}".format(sum(totals))) end = time.time() print(end - start) if __name__ == '__main__': main()
$ time python thread_load.py 1 Results: [{'count': 40000000, 'total': 19996878.531261113}] Total: 19996878.531261113 6.478948354721069 real 0m6.539s user 0m6.491s sys 0m0.012s
$ time python thread_load.py 4 Results: [{'count': 10000000, 'total': 5000680.7382364655}, {'count': 10000000, 'total': 5000496.15077697}, {'count': 10000000, 'total': 5000225.747780174}, {'count': 10000000, 'total': 4999503.803068357}] Total: 20000906.43986197 6.180345296859741 real 0m6.241s user 0m6.283s sys 0m0.029s