""" |
多进程和进程池的使用 |
多线程因为GIL的存在不能够发挥CPU的多核特性 |
对于计算密集型任务应该考虑使用多进程 |
time python3 example22.py |
real 0m11.512s |
user 0m39.319s |
sys 0m0.169s |
使用多进程后实际执行时间为11.512秒,而用户时间39.319秒约为实际执行时间的4倍 |
这就证明我们的程序通过多进程使用了CPU的多核特性,而且这台计算机配置了4核的CPU |
""" |
import concurrent.futures |
import math |
PRIMES = [ |
1116281 , |
1297337 , |
104395303 , |
472882027 , |
533000389 , |
817504243 , |
982451653 , |
112272535095293 , |
112582705942171 , |
112272535095293 , |
115280095190773 , |
115797848077099 , |
1099726899285419 |
] * 5 |
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() |