import pp, time, math, multiprocessing, random # https://blog.csdn.net/qq_19175749/article/details/51611643 测试素数计算所用代码参考
defisprime(n): """Returns True if n is prime and False otherwise""" ifnotisinstance(n, int): raise TypeError("argument passed to is_prime is not of 'int' type") if n < 2: returnFalse if n == 2: returnTrue max = int(math.ceil(math.sqrt(n))) i = 2 while i <= max: if n % i == 0: returnFalse i += 1 returnTrue
defsum_primes(n): """Calculates sum of all primes below given integer n""" returnsum([x for x inrange(2, n) if isprime(x)])
print("CPU Core: ", multiprocessing.cpu_count()) inputs = tuple([random.randint(10000, 10090) for i inrange(2000)]) # 生成100个测试数据 # mul并行不切换process带锁 print("{beg}mul并行不切换process带锁{beg}".format(beg='-' * 16)) startTime = time.time() inputs = inputs result_list = multiprocessing.Queue() plist = [] re_queue = multiprocessing.Queue() for i in inputs: re_queue.put(i) lock = multiprocessing.Lock() for i inrange(multiprocessing.cpu_count()): p = multiprocessing.Process(target=mains, args=(result_list, re_queue, lock)) p.start() plist.append(p) for i in plist: p.join() for i inrange(result_list.qsize()): input, result = result_list.get() # print("Sum of primes below %s is %s" % (input, result)) # print('+', end='') print("\n用时:%.3fs" % (time.time() - startTime))
# mul并行不切换process不带锁 print("{beg}mul并行不切换process不带锁{beg}".format(beg='-' * 16)) startTime = time.time() inputs = inputs result_list = multiprocessing.Queue() plist = [] re_queue = multiprocessing.Queue() for i in inputs: re_queue.put(i) for i inrange(multiprocessing.cpu_count()): p = multiprocessing.Process(target=mains2, args=(result_list, re_queue)) p.start() plist.append(p) for i in plist: p.join() for i inrange(result_list.qsize()): input, result = result_list.get() # print("Sum of primes below %s is %s" % (input, result)) # print('+', end='') print("\n用时:%.3fs" % (time.time() - startTime))