• python多进程多线程的区别


    进程与线程

    进程的两种创建方式

    进程模块,multiprocessing  的 Process

    进程的创建 变量 =  Process(target = 指定函数,args = (1,))指定函数参数  

    a = Process(target = 函数,args = (参数) 注:函数无需加括号,参数以元组形式传进去

    这样我们就创建了一个进程,target 无需加括号!

    我们通过 变量.start() 调用某进程, 然后使用:变量.join()阻塞母进程,

    让母进程等待子进程执行完毕.否则就母进程先执行了,

    那样就达不到我们想要的结果了.

    串行只在计算少数问题时计算速度比并行块

    假设中间有停顿的话,比如time.sleep(2) 那么并行一定比串行快.

    并行两个sleep同时运行,所以要快,串行则需要执行两遍sleep,时间长的多.

    a = Process(target = 函数,args = 函数参数) 函数无需加括号

    a.start() 启动进程  a.join() 阻塞母进程,让子进程先执行.

    进程池

    from multiprocessing import Pool,cpu_count
    import os,time
    def long_time_task(i):
    print('我是子进程:{},进程ID:{}'.format(i,os.getpid()))
    time.sleep(2) #当某进程池执行到这时,因为需要等待时间,所以4个进程并行阻塞
      #当第1个进程执行完阻塞前和阻塞后的任务时,
      #才能进入第5个进程!

    print(i,'结果:{}'.format(8**20))

    if __name__ == '__main__':
    start = time.time()
    print('cpu内核数:{}'.format(cpu_count()))
    print('当前母进程:{}'.format(os.getpid()))
    p = Pool(4) #创建进程池
    for i in range(5): #
    p.apply_async(long_time_task,args=(i,))
    print('等待子进程执行!')
    p.close() #关闭进程池,并启动4个进程,第5个进程则需要等第1个的进程执行完毕才能进入
    p.join() #阻塞进程池的进程
    print('总用时:{}'.format(time.time() - start)) #得出总时长


  • 相关阅读:
    (转)如何最佳地使用memcached?
    win7 安装 memcached
    (转)怎么把主机的文件复制到虚拟机上
    memcache和redis本质区别在哪里?
    关于memcached
    (转)memcached注意事项
    (转)Memcached深度分析
    《项目架构那点儿事》——快速构建Junit用例
    《项目架构那点儿事》——工具类,你喜欢你就拿去
    《项目架构那点儿事》——Hibernate泛型Dao,让持久层简洁起来
  • 原文地址:https://www.cnblogs.com/lc1013/p/10306482.html
Copyright © 2020-2023  润新知