Skip to content

Instantly share code, notes, and snippets.

@xnuinside
Created December 8, 2019 08:20
Show Gist options
  • Save xnuinside/c217382af0bae95d84f1d28fe704a6b9 to your computer and use it in GitHub Desktop.
Save xnuinside/c217382af0bae95d84f1d28fe704a6b9 to your computer and use it in GitHub Desktop.
import multiprocessing as mp
from multiprocessing import Queue
from datetime import datetime
import sympy
start_time = datetime.now()
q = Queue()
def is_prime(left_border, right_border):
result = 0
print(left_border, ' ', right_border)
for n in range(left_border, right_border):
i = 2
j = 0
while i ** 2 <= n and j != 1:
if n % i == 0:
j = 1
i += 1
if(j!=1):
result += 1
print(result)
q.put(result)
def is_prime_sympy(left_border, right_border):
result = 0
print(left_border, ' ', right_border)
for n in range(left_border, right_border):
if sympy.isprime(n):
result += 1
print(result)
q.put(result)
def run_numbers_count():
num_cores = mp.cpu_count()
pool = mp.Pool(num_cores)
jobs = []
right_border = 0
final_number = 2000000
chunk_size = 100000
count_of_chunks = int(final_number/chunk_size)
for item in range(0, count_of_chunks):
left_border = right_border
right_border += chunk_size
jobs.append(pool.apply_async(is_prime_sympy, (left_border, right_border)))
# wait for all jobs to finish
for job in list(jobs):
job.get()
# clean up
pool.close()
total_result = 0
while not q.empty():
total_result += q.get()
print(total_result)
run_numbers_count()
print(f'start: {start_time}')
print(f'final: {datetime.now()}')
#from timeit import timeit
#print(timeit(run_numbers_count, number=10000))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment