Python多进程

来源:互联网 发布:联合办公 知乎 编辑:程序博客网 时间:2024/05/21 11:08

摘要

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

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

TIPS:
(1) CPU 密集运算才用多进程
(2) I/O 密集运算用多线程

斐波那契数列

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

import multiprocessingimport 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 s2def 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)

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

Processing Pool Initiated!3524578433494437655747031984280651553304939353316291173Processing Pool Terminated!Finished in 0.198444128036499023524578433494437533162911736557470319842806515533049393Finished in 9.393692016601562e-05