python-----多线程、线程池、进程池
import threading
import time ###############################多线程###############################
#----------函数无参数,子线程等待方式 循环join
def run():
time.sleep(2)
print("正在执行" ,threading.current_thread())
starttime=time.time()
threads=[]
for i in range(3):
t=threading.Thread(target=run)
threads.append(t)
t.start()
for t in threads:
t.join()
endtime=time.time()
print(endtime-starttime) #----------函数无参数,子线程等待方式 循环join函数带参数run(name) 线程传递参数args=('ABC',) 一个参数元组必须用“,”,子线程等待方式 while threading.active_count() != 1
def run(name):
time.sleep(2)
print("正在执行:%s" %name,threading.current_thread())
starttime=time.time() for i in range(3):
t=threading.Thread(target=run,args=('ABC',))
t.start()
while threading.active_count() !=1:
print("子线程已执行完毕")
endtime = time.time()
print(endtime - starttime) ################################线程池###############################
import threadpool
#辅助方法
import pymongo,requests
client = pymongo.MongoClient(host='118.24.3.40',port=27017)
table = client['likun']['qq_group_likun']
all_qq = [i.get('qq') for i in table.find()]
url = 'http://q4.qlogo.cn/g?b=qq&nk=%s&s=140' def down_img(qq_num):
res = requests.get(url%qq_num).content
with open('%s.jpg'%qq_num,'wb') as fw:
fw.write(res) #线程池实现
pool = threadpool.ThreadPool(200) #线程池的大小
all_requests = threadpool.makeRequests(down_img,all_qq)#分配数据 makeRequests(函数,list)
for r in all_requests:
pool.putRequest(r) #发请求
pool.wait()#等待所有线程运行完
print('done!下载完成。') #################################进程池###############################
from multiprocessing import Process,Pool,active_children
import pymongo,requests
import threading
#辅助方法
client = pymongo.MongoClient(host='118.24.3.40',port=27017)
table = client['likun']['qq_group_likun']
all_qq = [i.get('qq') for i in table.find()]
url = 'http://q4.qlogo.cn/g?b=qq&nk=%s&s=140'
def down_img(qq_num): res = requests.get(url%qq_num).content
with open('%s.jpg'%qq_num,'wb') as fw:
fw.write(res)
#进程池实现
if __name__ == '__main__':
# for qq in all_qq:
# p = Process(target=down_img,args=(qq,)) #启动多进程
# p.start()
pool = Pool(5)#指定进程池的大小
list(pool.map(down_img,all_qq)) #运行 使用进程池
python-----多线程、线程池、进程池的更多相关文章
- Python并发编程之线程池&进程池
引用 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我 ...
- Python并发编程之线程池/进程池--concurrent.futures模块
一.关于concurrent.futures模块 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/ ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mult ...
- python GIL锁、进程池与线程池、同步异步
一.GIL全局解释器锁 全局解释器锁 在CPython中,全局解释器锁(GIL)是一个互斥锁,它可以防止多个本机线程同时执行Python代码.之所以需要这个锁,主要是因为CPython的内存管理不是线 ...
- python并发编程之进程池,线程池,协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- python自带的进程池及线程池
进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...
- Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就绪,挂起,运行) ,***协程概念,yield模拟并发(有缺陷),Greenlet模块(手动切换),Gevent(协程并发)
Python进阶----异步同步,阻塞非阻塞,线程池(进程池)的异步+回调机制实行并发, 线程队列(Queue, LifoQueue,PriorityQueue), 事件Event,线程的三个状态(就 ...
- python并发编程之进程池、线程池、协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制
1.线程queue :会有锁 q=queue.Queue(3) q.get() q.put() 先进先出 队列后进先出 堆栈优先级队列 """先进先出 队列"& ...
- Python3【模块】concurrent.futures模块,线程池进程池
Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/销毁进程或者线程是非常消耗资源的,这个时候我们就要 ...
随机推荐
- shiny: Web Application Framework for R
shiny: Web Application Framework for R 基于R语言的一个web框架,适用于数据分析与图表绘画展示类型的网站.
- Android 实时录音和回放,边录音边播放 (KTV回音效果)
上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...
- rsync用于数据迁移/备份的几个细节
上周我们的一个GitLab服务频繁出现web页面卡死问题,得重启虚拟机才可恢复,但重启之后没多久又会卡死.后来发现是虚拟机的磁盘大小超过了2T,而虚拟机管理那层的文件系统是ext3,最大单文件只能支持 ...
- zookeeper 入门(二)
上一篇教程中重点讲解了如何部署启动一台zookeeper服务 本章中我们会重点讲解下如何 部署一套zookeeper的集群环境 基于paxos 算法,部署一套集群环境要求 至少 要有3个节点 并且节 ...
- jquery checkbox checked 却不显示对勾
$("input").attr("checked", true); 或 $("input").attr("checked" ...
- 线程安全的ConcurrentQueue<T>队列
队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. ConcurrentQueue< ...
- Java知多少(103)网络编程之IP地址和InetAddress类
Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TC ...
- 【转载】Ubuntu安装之,硬盘分区
关于分区 如果你只是简单地想用上Ubuntu,可以这样操作:1)如果你是直接将整个硬盘都用来装Ubuntu,机器上没有需要保存的数据,或者已经做好备份的情况下,可以直接在Ubuntu分区时选择“向导─ ...
- Android WiFi 获取国家码
记录一下Android获取国家码的方式 Wifi 国家码获取途径 1.DefaultCountryTablefield in WCNSS_qcom_wlan_nv.bin-read during dr ...
- Java SpringBoot中使用sqljdbc4注意事项 java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
因项目需要,需要在Java项目中访问 MSSQLServer 数据库,本地开发的时候,没有问题,可以正常链接数据库,通过Jenkins部署到服务器上时候,报数据库驱动未找到. java.lang.Cl ...