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
相关文章推荐
- python 多进程
- python中的多进程处理
- Python多进程分块读取文件
- 简单的Python 多进程异步处理 | 王晨的博客
- python类库32[多进程通信Queue+Pipe+Value+Array]
- Python标准库11 多进程探索 (multiprocessing包)
- MySQL 5.5 DBA工具 多进程dump 多进程load 多进程备份还原 python 脚本
- python中的多进程处理
- python创建多进程/多线程
- 一个减少多进程下python内存占用的小技巧
- Python 多进程
- Python模块整理(五):多进程multiprocessing
- python多进程分块读取文件
- python类库32[多进程]
- 最简单方法远程调试Python多进程子程序
- Python多进程
- 生产者消费者模型-python-多进程
- [Python]多进程
- python类库32[多进程]
- Python标准库11 多进程探索 (multiprocessing包)