专栏首页python前行者python线程池(threadpool)

python线程池(threadpool)

一、安装与简介

pip install threadpool

import threadpool   

#poolsize为线程池的数量
pool = threadpool .ThreadPool(poolsize)  
requests = threadpool.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 threadpool,time

lock = threading.Lock()

def sayhello(str):
    lock.acquire()
    print ("Hello ",str)
    time.sleep(2)
    lock.release()

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() 

参考:https://www.cnblogs.com/xiaozi/p/6182990.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python判断字符串是中文还是英文

    1、中日韩扩展部首[2E80-2EFF](116字) 2、康熙字典部首[2F00-2FDF](214字) 3、表意文字描述字符[2FF0-2FFF](12字...

    周小董
  • Python计算程序运行时间

    k为datetime.timedelta类型,以上是timedelta的所有的属性和函数 利用以下代码可以获取以秒为单位的时间差,小数点后6位为微秒。

    周小董
  • python之jsonpath

    官方文档:http://docs.python.org/library/json.html

    周小董
  • 托管还是重建,企业如何用好公有云

    数字化转型继续为企业的业务发展创造机会。由于英国脱欧的不确定性,英国很多企业正在考虑实施数字化转型计划,以确保业务持续增长。许多人认为数字化转型是提高竞争力的关...

    CloudBest
  • 国庆长假综合症?云真机新功能让你迅速重回高效测试状态

    可是,假期远去,日子还得照样过,为了让技术人员在国庆假期结束后能够加快测试效率,WeTest开发人员,在长假期间中开发了一个新功能——云真机键盘输入。

    WeTest质量开放平台团队
  • Java 响应式关系数据库连接了解一下

    响应式编程已经在 Java 编程领域出现很长一段时间了。具有高性能,事件驱动,充分利用计算资源,更加优雅的异步编程体验,同时它也提供了背压机制来防止系统过载。很...

    码农小胖哥
  • javaWeb idea学习笔记(五)ServletRequest、ServletResponse

    2.tomcat会创建request和response对象传递给service方法,并调用service

    逆回十六夜
  • Tensorflow 中 learning rate decay 的奇技淫巧

    深度学习中参数更新的方法想必大家都十分清楚了——sgd,adam 等等,孰优孰劣相关的讨论也十分广泛。可是,learning rate 的衰减策略大家有特别关注...

    AI研习社
  • Oracle RAC环境下定位并杀掉最终阻塞的会话-续

    Alfred Zhao
  • 你不得不知道的HTTP状态码有哪些

    100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

    黄泽杰

扫码关注云+社区

领取腾讯云代金券