Python之路:线程池
版本一
# --*--coding:utf-8 --*--
import Queue
import threading
class ThreadPool(object):
#创建类
def __init__(self, max_num=20):#进程函数,默认最大20个进程
self.queue = Queue.Queue(max_num)#生成进程
for i in xrange(max_num):#循环进程
self.queue.put(threading.Thread)#上传进程
def get_thread(self):#下载进程函数
return self.queue.get()
def add_thread(self):#生成进程函数
self.queue.put(threading.Thread)
pool = ThreadPool(10)#执行类,并传默认进程数值
def func(arg, p):#打印进程
print arg
import time
time.sleep(2)#间隔2秒
p.add_thread()
for i in xrange(30):#循环进程
thread = pool.get_thread()
t = thread(target=func, args=(i, pool))#传值到func函数,并且执行
t.start()
版本二
import contextlib
import threading
WorkerStop = object()
class ThreadPool:
workers = 0
threadFactory = threading.Thread
currentThread = staticmethod(threading.currentThread)
def __init__(self, maxthreads=20, name=None):
self.q = Queue(0)
self.max = maxthreads
self.name = name
self.waiters = []
self.working = []
def start(self):
while self.workers < min(self.max, self.q.qsize()+len(self.working)):
self.startAWorker()
def startAWorker(self):
self.workers += 1
name = "PoolThread-%s-%s" % (self.name or id(self), self.workers)
newThread = self.threadFactory(target=self._worker, name=name)
newThread.start()
def callInThread(self, func, *args, **kw):
self.callInThreadWithCallback(None, func, *args, **kw)
def callInThreadWithCallback(self, onResult, func, *args, **kw):
o = (func, args, kw, onResult)
self.q.put(o)
@contextlib.contextmanager
def _workerState(self, stateList, workerThread):
stateList.append(workerThread)
try:
yield
finally:
stateList.remove(workerThread)
def _worker(self):
ct = self.currentThread()
o = self.q.get()
while o is not WorkerStop:
with self._workerState(self.working, ct):
function, args, kwargs, onResult = o
del o
try:
result = function(*args, **kwargs)
success = True
except:
success = False
if onResult is None:
pass
else:
pass
del function, args, kwargs
if onResult is not None:
try:
onResult(success, result)
except:
#context.call(ctx, log.err)
pass
del onResult, result
with self._workerState(self.waiters, ct):
o = self.q.get()
def stop(self):
while self.workers:
self.q.put(WorkerStop)
self.workers -= 1
"""
def show(arg):
import time
time.sleep(1)
print arg
pool = ThreadPool(20)
for i in range(500):
pool.callInThread(show, i)
pool.start()
pool.stop()
"""
转载于:https://www.cnblogs.com/wulaoer/p/5122472.html
Python之路:线程池相关推荐
- python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...
- python ping利用线程池获取在线设备
python ping获取一个VLAN在线设备 myPyPingDevice.py """=== coding: UTF8 ===""" # ...
- 用 Python 实现的线程池
为了提高程序的效率,经常要用到多线程,尤其是IO等需要等待外部响应的部分.线程的创建.销毁和调度本身是有代价的,如果一个线程的任务相对简单,那这些时间和空间开销就不容忽视了,此时用线程池就是更好的选择 ...
- Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化
大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...
- Python学习:线程池原理及实现
传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于 ...
- 【Python】实现线程池
一.线程池代码解释 1.初始化函数__init__(): 2.线程池启动函数run(): 3.创建线程函数generate_thread(): 4.处理任务函数call(): 5.关闭线程函数clos ...
- Python爬虫_线程池实例——北京新发地菜价
import requests import json import jsonpath from concurrent.futures import ThreadPoolExecutor print( ...
- python爬虫利用线程池下载视频
由于requests模块中,requests.get()是线程阻塞的,所有当有多个爬虫进行爬取时,那么单线程式爬虫是耗时比较长的,所以我们需要使用线程池,利用线程池来爬取耗时比较长的资源,这里我们使用 ...
- python之路--线程和进程
线程 python中有关线程的有两个模块比较常用 分别是thread和threading. 首先说为什么要用线程呢.正如那句话吃着火锅听着歌. 像之前写的python程序,程序执行,每时刻只有一个任务 ...
- 自定义简单版本python线程池
python未提供线程池模块,在python3上用threading和queue模块自定义简单线程池,代码如下: 1 #用threading queue 做线程池 2 import queue 3 i ...
最新文章
- python解释器运行代码-python解释器怎么运行
- 《互联网运营智慧》终于上市销售了
- linux:安装ubuntu18-04
- c#中BackGroundWorker控件
- Redis悲观锁、乐观锁和调用Lua脚本的优缺点
- 马化腾“闪退”华人首富;马云回应收购中天微;华为遭美刑事调查 | CSDN极客头条...
- Python的Boolean操作
- SecureCrt 常用命令
- CS0016错误解决汇编
- MyBatis源码阅读(八) --- Executor执行器
- excel多个工作表合并在一个表
- 【12c】直方图Histograms
- 费马定理_高数_1元微积分
- Java和部门管理的那些事情
- js-视频播放插件Video.js简单使用
- 发票查验平台验证码识别
- 浅谈-什么是计算机视觉
- wifi6 增加穿墙能力详解
- ddm模型公式_用DDM模型来判断市场理论上的合理市盈率
- SQL数据库系统设计之食堂管理系统
热门文章
- Mysql JDBC 连接串参数说明
- Android——用Activity和Service实现简单的音乐播放器
- UVa OJ 120
- 微软企业库5.0 学习之路——UnityPIAB 通过配置实现AOP
- vue-electron 写一个markdown文章编辑器(一)
- Javascript 创建对象方法的总结
- Open XML应用安全(2)OLE机制
- There is no public key available for the following key IDs
- c# GDI+简单绘图(一)
- 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】