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()
  • 相关阅读:
    webpack loader和插件的编写原理
    vue和react原理性知识点
    详谈Javascript类与继承
    vue项目中要实现展示markdown文件[转载]
    前端知识总结--2 js部分
    前端知识总结--html
    react相关知识点总结
    优秀文章
    项目部署服务器2
    项目部署服务器
  • 原文地址:https://www.cnblogs.com/qwj-sysu/p/5568232.html
Copyright © 2011-2022 走看看