Code: Alles auswählen
import threading
import timeit
import multiprocessing
class LoopThread(threading.Thread):
"definition of a single thread checking a list for primes"
def __init__(self, nodes):
threading.Thread.__init__(self)
self.nodes = nodes
def run(self):
primes = []
for n in self.nodes:
if self.is_prime(n):
primes.append(n)
#print primes
def is_prime(self, p):
i = 2
while i*i < p:
if p % i == 0:
return False
i += 1
return True
class ThreadStarter(object):
"splits list according to number of CPUs an runs threads"
def __init__(self, lst):
l = len(lst)
if multiprocessing.cpu_count() == 2:
self.lsts = (lst[:l/2], lst[l/2:])
if multiprocessing.cpu_count()== 4:
self.lsts = (lst[:l/4], lst[l/4:l/2], lst[l/2:3*l/4], lst[3*l/4:])
def run(self):
threads = []
for l in self.lsts:
thread = LoopThread(l)
threads.append(thread)
thread.start()
for t in threads:
thread.join()
return True
if __name__ == "__main__":
def run_multithread():
lst = range(1000)
starter = ThreadStarter(lst)
starter.run()
def run_singlethread():
lst = range(1000)
thread = LoopThread(lst)
thread.start()
thread.join()
t1 = timeit.Timer("run_multithread()", "from __main__ import run_multithread")
print "multithread : ", t1.timeit(1000)
t2 = timeit.Timer("run_singlethread()", "from __main__ import run_singlethread")
print "singlethread: ", t1.timeit(1000)
Code: Alles auswählen
multithread : 2.88458013535
singlethread: 2.90721392632
Weiss jemand die Antwort? Vielen Dank.