您的位置:首页 > 编程语言 > Python开发

Python多进程

2017-06-21 16:12 246 查看

摘要

尝试使用Python多进程来加快运算

参考资料:http://python.jobbole.com/82045/

TIPS:

(1) CPU 密集运算才用多进程

(2) I/O 密集运算用多线程

斐波那契数列

斐波那契数列的计算属于纯计算型的问题,无IO等额外时间的开销

import multiprocessing
import time

# 计算第n个Fibonacci数[O(n)]
def fibonacci(num=10):
s1=1
s2=1
for _ in range(num-2):
temp = s1+s2
s1 = s2
s2 = temp
return s2

def callback(object):
print(object)

def mp_fibonacci():
pool = multiprocessing.Pool(processes=3)

result1 = pool.apply_async(fibonacci, (33,), callback=callback)
result2 = pool.apply_async(fibonacci, (43,), callback=callback)
result3 = pool.apply_async(fibonacci, (53,), callback=callback)
result4 = pool.apply_async(fibonacci, (63,), callback=callback)
result5 = pool.apply_async(fibonacci, (73,), callback=callback)

print("Processing Pool Initiated!")
pool.close()
pool.join()  # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
print("Processing Pool Terminated!")

def get_fibonacci():
print(fibonacci(33))
print(fibonacci(43))
print(fibonacci(53))
print(fibonacci(63))
print(fibonacci(73))

if __name__ == "__main__":
start_t = time.time()
mp_fibonacci()
print("Finished in",time.time()-start_t)

start_t = time.time()
get_fibonacci()
print("Finished in", time.time() - start_t)


然后我们惊奇地发现,用进程池好像还慢些,gg思密达 )T.T)

看来,除非真的是大规模
4000
的运算,进程池调度的花销远比直接单线程高

Processing Pool Initiated!
3524578
433494437
6557470319842
806515533049393
53316291173
Processing Pool Terminated!
Finished in 0.19844412803649902

3524578
433494437
53316291173
6557470319842
806515533049393
Finished in 9.393692016601562e-05
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: