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

    一、安装与简介

    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


  • 相关阅读:
    面向对象编程思想-组合模式
    原生JS:Array对象详解
    一些XMLHttpRequest的例子代码
    详细解读XMLHttpRequest(一)同步请求和异步请求
    深入理解:JavaScript原型与继承
    轻松掌握:JavaScript状态模式
    轻松掌握:JavaScript装饰者模式
    轻松掌握:JavaScript享元模式
    轻松掌握:JavaScript模板方法模式
    回调函数的意义以及python实现
  • 原文地址:https://www.cnblogs.com/zhaoyingjie/p/10427983.html
Copyright © 2011-2022 走看看