以下代码从用户获取2个数字,并计算这些数字之间有多少素数。 在没有线程的情况下运行代码(1到1000000之间)让我获得2.8秒并且有2个线程(我的CPU有2个核心)我得到了4.8秒。 它是PC的问题,代码。 如果您可以尝试在PC上运行并分享结果,我会感谢您的。 如果您发现代码存在问题或者想知道为什么会发生这种情况,请分享您的难度。
import math
from threading import Thread
from timeit import timeit
first_num = input()
last_num = input()
primes = []
def is_prime(num):
if num == 2:
return True
if num == 1 or num % 2 == 0:
return False
for i in xrange(3, int(math.sqrt(num)) + 1, 2):
if (num % i == 0):
return False
return True
def find_primes(numbers):
for num in numbers:
if is_prime(num):
primes.append(num)
def targil_a():
find_primes(xrange(first_num, last_num))
print len(primes)
def targil_b():
numbers = range(first_num, last_num)
threads = []
for i in xrange(2):
part_len = int(len(numbers)/2)
t = Thread(target=find_primes, args=(numbers[part_len*i: part_len*(i+1) + 1],))
t.start()
threads.append(t)
for trd in threads:
trd.join()
print len(primes)
print timeit(targil_a, number=1)
primes = []
print timeit(targil_b, number=1)