python中的多线程与多进程

来源:互联网 发布:对淘宝美工课的认知 编辑:程序博客网 时间:2024/05/22 12:57

对于计算密集型任务来说,将cpu的效率发挥到100%是最理想的情况。而对于IO密集型任务来说则不需要占用太多CPU。

单个进程中可以同时启动多个线程,但多个线程同时共享同一个cpu核,所以对于计算密集型任务来说,使用多进程才能将cpu效率发挥至最高

参考如下两个例子启动多进程与多线程:

# 多线程from multiprocessing import poolimport osimport timeimport numpy as npdef worker(id):    print "worker"    for i in range(1000000):        np.sqrt(i**2)    print str(os.getpid())+"\t"+str(id)    print "end worker"iters = range(10)time1 = time.asctime()pool = pool.ThreadPool(10)num = pool.map(worker, iters)pool.close()pool.join()print time1print time.asctime()
# 多进程import multiprocessingimport timeimport osimport numpy as npdef worker(id):    print "worker"    for i in range(1000000):        np.sqrt(i**2)    print str(os.getpid())+"\t"+str(id)    print "end worker"if __name__ == "__main__":    pool = multiprocessing.Pool(processes=10)    time1 = time.asctime()    nb = range(10)    pool.map(worker, nb)    pool.close()    pool.join()     print time1    print time.asctime()

上面两个程序唯一的差别在于pool是用multiprocessing.pool.ThreadPool还是multiprocessing.Pool,用后者即实现了多进程。对比时间发现,后一个程序的运行时间是前一个时间的cpu数量分之一。

另外,进程启动数量并非越多越好,这取决于计算机的真正物理核数量,而不是虚拟线程数,获取方式为multiprocessing.cpu_count()/2。