zoukankan      html  css  js  c++  java
  • python的多线程、多进程代码示例

    python多进程和多线程的区别:
    python的多线程不是真正意义上的多线程,由于python编译器的问题,导致python的多线程存在一个PIL锁,使得python的多线程的CPU利用率比预期的要低很多
    python的多进程(java的应该也是)有内存拷贝的问题,所以建议用java或者c的多线程。

    多线程有两种方式:thread和threading

    这里应用的场景是map数据分多线程、进度写入codis的示例

    这是thread的示例:thread的主进程不会等待线程

    import thread,math,threading,multiprocessing,os,time
    def writeToCodis(prefix,key_list,result_map):
        # client = BfdCodis("xxx", )
        begin = int(time.time())
        for key in key_list:
            print key 
            # client.set(prefix + key, result_map[key])
            # client.expire(prefix + key, 1 * 24 * 3600)
        end = int(time.time())
    # 分配key
    gidToSid={1:2,3:4}
    total_key = len(gidToSid)
    gap = int(math.ceil(float(total_key)/process_num))
    keys = gidToSid.keys()
    for i in range(0,process_num):
        thread.start_new_thread(writeToCodis,(G2S_prefix,keys[i*gap:(i+1)*gap],gidToSid))
        # t.start()
    time.sleep(10)

    threading 会等待线程的执行

    for i in range(0,process_num):
        t=threading.Thread(target=writeToCodis,args=(G2S_prefix,keys[i*gap:(i+1)*gap],gidToSid))
        t.start()

    这是多进程的示例

    for i in range(0,process_num):
        p = multiprocessing.Process(target=writeToCodis,args=(G2S_prefix,keys[i*gap:(i+1)*gap],gidToSid))
        p.start()
  • 相关阅读:
    vuex之store拆分即多模块状态管理
    vue项目中使用vueX
    vue中父子组件的参数传递和应用
    VUE中使用vue-awesome-swiper
    VUE真实项目中常用的生命周期和参数
    VUE生命周期
    vue+mockjs 模拟数据,请求回调的应用
    Vue项目搭建与部署还有调试插件Vue.js devtools
    tableTD中添加对角斜线
    前端面试题及答案,理论知识
  • 原文地址:https://www.cnblogs.com/qwj-sysu/p/5568232.html
Copyright © 2011-2022 走看看