-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPython_Multiprocessing_Concurrent_Futures.py
More file actions
50 lines (40 loc) · 1.91 KB
/
Copy pathPython_Multiprocessing_Concurrent_Futures.py
File metadata and controls
50 lines (40 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Python multiprocessing - Process-based parallelism
# The following scripts are written to demonstrate multiprocessing (Process-based parallelism)
# using Python.
# Multiprocessing is a Python package that supports spawning processes using an API similar to
# the threading module. The multiprocessing package offers both local and remote concurrency,
# effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads.
# Due to this, the multiprocessing module allows the programmer to fully leverage multiple
# processors on a given machine. It runs on both Unix and Windows.
# The multiprocessing module also introduces APIs which do not have analogs in the threading module.
# A prime example of this is the Pool object which offers a convenient means of parallelizing the
# execution of a function across multiple input values, distributing the input data across processes
# (data parallelism).
# ProcessPoolExecutor.
# The ProcessPoolExecutor class is an Executor subclass that uses a pool of processes to execute calls
# asynchronously.
# ProcessPoolExecutor uses the multiprocessing module, which allows it to side-step the Global Interpreter
# Lock but also means that only picklable objects can be executed and returned.
import concurrent.futures
import math
PRIMES = [
112272535095293,
112582705942171,
112272535095293,
115280095190773,
115797848077099,
1099726899285419]
def is_prime(n):
if n % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(n)))
for i in range(3, sqrt_n + 1, 2):
if n % i == 0:
return False
return True
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
print('%d is prime: %s' % (number, prime))
if __name__ == '__main__':
main()