zoukankan      html  css  js  c++  java
  • python线程池(threadpool)模块使用笔记

    一、安装与简介

    pip install threadpool   

    pool = ThreadPool(poolsize)  
    requests = makeRequests(some_callable, list_of_args, callback)  
    [pool.putRequest(req) for req in requests]  
    pool.wait()  

    第一行定义了一个线程池,表示最多可以创建poolsize这么多线程;

    第二行是调用makeRequests创建了要开启多线程的函数,以及函数相关参数和回调函数,其中回调函数可以不写,default是无,也就是说makeRequests只需要2个参数就可以运行;

    第三行用法比较奇怪,是将所有要运行多线程的请求扔进线程池,[pool.putRequest(req) for req in requests]等同于

      for req in requests:  

         pool.putRequest(req) 

    第四行是等待所有的线程完成工作后退出。

    二、代码实例

    import time
    def sayhello(str): print
    "Hello ",str time.sleep(2) name_list =['xiaozi','aa','bb','cc']
    start_time = time.time()
    for i in range(len(name_list)): sayhello(name_list[i]) print '%d second'% (time.time()-start_time)

    改用线程池代码,花费时间更少,更效率

    import time
    import threadpool  
    def sayhello(str):
        print "Hello ",str
        time.sleep(2)
    
    name_list =['xiaozi','aa','bb','cc']
    start_time = time.time()
    pool = threadpool.ThreadPool(10) 
    requests = threadpool.makeRequests(sayhello, name_list) 
    [pool.putRequest(req) for req in requests] 
    pool.wait() 
    print '%d second'% (time.time()-start_time)

     当函数有多个参数的情况,函数调用时第一个解包list,第二个解包dict,所以可以这样:

    def hello(m, n, o):
        """"""
        print "m = %s, n = %s, o = %s"%(m, n, o)
         
     
    if __name__ == '__main__':
         
       # 方法1  
        lst_vars_1 = ['1', '2', '3']
        lst_vars_2 = ['4', '5', '6']
        func_var = [(lst_vars_1, None), (lst_vars_2, None)]
        # 方法2
        dict_vars_1 = {'m':'1', 'n':'2', 'o':'3'}
        dict_vars_2 = {'m':'4', 'n':'5', 'o':'6'}
        func_var = [(None, dict_vars_1), (None, dict_vars_2)]    
         
        pool = threadpool.ThreadPool(2)
        requests = threadpool.makeRequests(hello, func_var)
        [pool.putRequest(req) for req in requests]
        pool.wait()        

     需要把所传入的参数进行转换,然后带人线程池。

    def getuserdic():
        username_list=['xiaozi','administrator']
        password_list=['root','','abc123!','123456','password','root']
        userlist = []
        
        for username in username_list:
            
            user =username.rstrip()
            for password in password_list:
                pwd = password.rstrip()
                userdic ={}
                userdic['user']=user
                userdic['pwd'] = pwd
                tmp=(None,userdic)
                userlist.append(tmp)
        return userlist

     最后

    欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

     

     

  • 相关阅读:
    CF219D
    HDU 4259 Double Dealing 数学题
    HDU1599 find the mincost route 最小环
    HDU3592 World Exhibition 排队判断3种情况
    POJ3694 Network 加边查询剩余桥的个数
    Flex 如何获得Tree 拖动节点的起始位置
    wcf webconfig配置
    学JS面向对象 以及里面的继承
    sqlserver 几种查询耗时
    ubuntu更改文件夹属性
  • 原文地址:https://www.cnblogs.com/xiaozi/p/6182990.html
Copyright © 2011-2022 走看看