
Python技术基础
文章平均质量分 52
欢迎来到我的Python技术专栏!在这里,我将带你深入了解Python编程的魅力,从基础语法到高级应用,涵盖数据科学、机器学习、Web开发等多个领域。无论你是初学者还是经验丰富的开发者,都能找到实用的内容。每周更新,内容包括核心语法、库应用、项目实战、性能优化等。让我们一起探索Python的无限可能
生活不只*眼前的苟且
这个作者很懒,什么都没留下…
展开
-
Scrapy框架的用法实例
首先执行如下命令创建一个scrapy项目# scrapy startproject projectName主要有如下几个核心文件:items.py: 在项目的根目录middlewares.py: 在项目的根目录pipelines.py: 在项目的根目录projectName.py: 在spiders目录settings.py: 在项目的根目录我的实例是爬取和讯原创 2017-04-06 18:48:33 · 2105 阅读 · 2 评论 -
tf.layers.conv1d函数解析(一维卷积)
一维卷积一般用于处理文本,所以输入一般是一段长文本,就是词的列表函数定义如下:tf.layers.conv1d(inputs,filters,kernel_size,strides=1,padding='valid',data_format='channels_last',dilation_rate=1,activation=None,use_bias=True,...原创 2018-11-14 15:09:10 · 52929 阅读 · 17 评论 -
压测中提高并发数后服务端处理时间增长的原因分析
后端逻辑: 接收请求、分词匹配、读redis做一些过滤策略在不断提高并发数的压测过程中,发现一个问题,后台服务对一个请求的处理时间也在增高, 而且增高的主要时间是消耗在读redis过滤那块过滤那块的主要逻辑是:从redis中读数据,并基于这些数据做一些过滤的策略为什么这块的耗时会增长呢?难道是redis的线程池不够用?导致有些redis的io请求要等待一会?应该不会,因为redi...原创 2018-11-20 15:02:35 · 2984 阅读 · 0 评论 -
一次Redis任务队列积压的问题分析与解决
目前的流程:两个Redis:Redis1: 存储词条的summary信息Redis2:任务队列,用于暂存Redis中没有summary,需要进行处理获取summary, 队列用的Redis的list结构两个进程:1、 进程1:服务进程接收请求,划内链词,然后从Redis1中去获取词的summary, 如果获取失败,则返回code=4的错误,并将词条id写入任务队...原创 2018-11-16 11:32:32 · 6189 阅读 · 0 评论 -
两台机器实现QPS3000的服务优化
服务流程: 输入为一句话, 分词、匹配百科词条,读redis过滤、从redis读词条summary信息、返回需求: 业务方的峰值QPS为3000按照之前相关百科的一套逻辑: 单机tornado服务进程数4个模拟10个并发,压测的QPS为332, 响应时间为30ms$siege -c10 -r5000 -f urls.lstTransacti...原创 2018-11-16 19:41:18 · 2492 阅读 · 0 评论 -
日志中每段代码执行时间的和不等于整段代码执行的总时间
代码逻辑:A -> B -> C -> D 实践中,分别记录了上面四个步骤执行的时间, 假设为At, Bt, Ct, Dt,并且记录了整个4步的时间,假设为ADt发现4个代码片段的时间的和不等于总的时间, 也就是: ADt > At+Bt+Ct+Dt 原因是什么呢?A->D这个步骤中应该还有CPU调度的等待时间,这...原创 2018-11-21 19:24:06 · 417 阅读 · 0 评论 -
日志中每段代码执行时间的和不等于整段代码执行的总时间
代码逻辑:def getInlink() A -> B -> C -> D 在tornado中调用getInlink@tornado.gen.coroutine def get(self): start2 = int(time.time()*1000) error, errReason, lstS...原创 2018-11-22 10:10:21 · 438 阅读 · 0 评论 -
scrapy中自定义过滤规则以及start_urls不进过滤器的问题
为什么要自定义过滤规则呢? 首先,我们需要过滤,但是不是说抓一次就不抓了,因为我们的抓取是一段时间抓取一次自定义策略如下:首先我试图直接继承RFPDupeFilter在settings.py同级的目录下新建dupefilter.py文件,按照网上说的方法,写了内容如下from scrapy.dupefilter import RFPDupeFilterimport hashli...原创 2018-11-29 19:22:10 · 3665 阅读 · 0 评论 -
scrapy自定义Request的缓存策略(减少内存占用)
scrapy-redis大概的架构:从redis中拉url,构造Request对象,写入SCHEDULER_QUEUE_CLASS定义的队列中,调度器从队列中拉取Request进行抓取想自定义Request的初衷主要是为了减少内存的占用,当然虽然我们的内存消耗的也不是那么多,也就几个Gscrapy自带的几个队列有这么几个:* scrapy_redis.queue.SpiderQu...原创 2018-11-30 11:01:23 · 2362 阅读 · 0 评论 -
请求方报超时,服务日志中记录的时间却少有超时
请求方报超时的比例大概有4%他们设置的超时时间是500ms但是我们统计日志,服务时间超过500ms的日志很少原因是什么呢? 超时原因分析:1、请求内容太长根据请求方超时日志, 大多数query的长度都是1w以上,这些query我手动请求,响应时间的确大于500ms, 在服务端还没有处理完的时候,客户端已经超时断开了2、等待时间太长客户端报超时的query,其中有...原创 2018-11-27 14:19:44 · 2343 阅读 · 0 评论 -
scrapy自定义网页中图片的下载策略
自定义的初衷是:想修改保存文件的默认名称, 我们希望保留图片原始的文件名。 此外,scrapy图片的下载过滤策略是用了过期时间,可以通过在settings.py中配置如下参数来设置图片的过期时间:IMAGES_EXPIRES = 90但是对我们抓取百度百科的业务,一张图片如果已经抓取过,则不需要再重新抓取,所以这个是一次性的, 因为图片发生变化的可能性很小,所以没有必要做重复性的抓取...原创 2018-11-30 18:48:16 · 625 阅读 · 0 评论 -
tornado异步请求响应速度的实例测试
为什么要用异步处理?大部分Web应用(包括我们之前的例子)都是阻塞性质的,也就是说当一个请求被处理时,这个进程就会被挂起直至请求完成。在大多数情况下,Tornado处理的Web请求完成得足够快使得这个问题并不需要被关注。然而,对于那些需要一些时间来完成的操作(像大数据库的请求或外部API),这意味着应用程序被有效的锁定直至处理结束,很明显这在可扩展性上出现了问题。不过,Tornado给了我...原创 2018-12-06 18:53:17 · 2414 阅读 · 1 评论 -
写磁盘太慢导致服务超时问题分析
服务逻辑: 接收客户端的请求参数,写文件到本地磁盘 问题发现: 客户端报超时, 每天日志理论上是有几万条的,但是近几天只收到了几条 问题分析: 其实最开始的时候,以为是服务端处理不过来导致的,因为最开始服务端只有两个服务进程,后来增加了服务进程数,但是超时问题仍然没有得到解决 也怪自己没有做压力测试,如果做了压测,那么服务处理不过来的...原创 2018-12-10 12:11:43 · 2525 阅读 · 0 评论 -
不重启服务如何定时更新进程中的一个对象
场景: 主进程中初始化了一个对象(C++模块的对象,占用内存比较大,因为加载了一个很大的词表),然后启动子进程,并在子进程中使用这个对象,子进程对这个对象只读,不写 这个对象需要周期性的更新,因为要在对象中重新加载一些数据 如何不重启服务来更新这个对象呢?首先: 子进程因为不会对这个对象写,所以它们使用的其实跟主进程是同一个...原创 2019-03-01 10:30:46 · 1290 阅读 · 0 评论 -
服务超时实战分析
开发服务的时候,经常发现客户端超时的情况,但是从服务端的日志来看又都比较正常,下面是我项目中遇到的一些不同的超时情况。业务场景: 基于一段长文本,划出文本中的内链我主要遇到过如下三种场景的超时1、客户端query太长服务对这个query的处理消耗的时间比客户端设置的超时长,导致服务还没有把请求处理完毕,客户端就已经超时断开了当时调用方反馈了超时情况后,...原创 2019-04-29 09:46:57 · 2044 阅读 · 0 评论 -
python项目“内存泄漏”的调试过程
现象:在压测的过程中,服务消耗的内存不断飙升,使用的内存大大超过了它可能消耗的内存大小首先是内存泄漏的几个可能原因:1、存在循环引用,gc不能释放;2、存在全局对象,该对象不断的变大,占据内存;3、使用了c或者c++扩展,扩展内存溢出了;1、首先检查代码,把代码中可能发生内存小泄漏的地方全部修改下、代码中没有调用c或者c++的扩展库2、查看下gc是否被禁止了i...原创 2019-04-29 09:56:01 · 6333 阅读 · 2 评论 -
二维卷积神经网络的结构理解
针对这个图,我们对应着卷积的api函数来说:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)如上图:第一列为一张输入图像, 大小为7*7*3, 即宽高为7*7, 通道数为3所以inputs的维度就是: [-1, 7, 7, 3] , -1是表示batch的大小可以...原创 2018-11-14 15:07:13 · 6491 阅读 · 0 评论 -
个人对stacking的思想理解
主要分为几个基础模型,一个元模型对于基础模型,采用K折交叉的方式来采样数据,并分别进行训练,这样对于每个模型,都会用K组采样数据来进行训练,从而得到K个不同的模型版本假设现在基础模型有KNN,SVM, 那么对基础模型训练后会得到如下几个模型:KNN_model1, KNN_model2....KNN_modelKSVM_model1, SVM_model2....SVM_model...原创 2018-11-14 15:05:50 · 671 阅读 · 0 评论 -
preprocessing.StandardScaler中fit、fit_transform、transform的区别
1、fit用于计算训练数据的均值和方差, 后面就会用均值和方差来转换训练数据 2、fit_transform不仅计算训练数据的均值和方差,还会基于计算出来的均值和方差来转换训练数据,从而把数据转换成标准的正太分布 3、transform很显然,它只是进行转换,只是把训练数据转换成标准的正态分布 一般使用方法:a) 先用fitscaler = prepro...原创 2018-11-14 15:04:15 · 33012 阅读 · 8 评论 -
python程序退出策略
python程序退出策略:其实跟java的jvm退出策略一致,只有在没有用户线程/进程,只有后台线程或进程的时候,才会退出,注意,主线程默认应该是用户线程在主线程中新建子线程或者子进程默认都是用户线程或者进程,此时如果主线程提前结束,那么必须等待子线程或子进程退出,python程序才会退出。如果在新建子线程/子进程的时候设置成了守护的,那么当主线程结束的时候就会直接退出。设置守原创 2017-02-22 12:10:00 · 2235 阅读 · 0 评论 -
一次Python性能调优经历
从毕业到现在一直都是做java的,最近因为转到数据组,所以开始着手学python。近期一个项目需求是把百度百科词条页面里面的“明星关系”抽取出来并存储,当然这里不用实时的从百度百科上去爬取,百度百科的词条信息已经全部在我们mongodb库中,总计1700万的词条,当然这里有很大的重复。当然这里,因为数据量太大,所以必须要开启多线程处理,最开始用的是python的concurrent包里面的原创 2017-02-17 19:24:50 · 4256 阅读 · 0 评论 -
使用multiprocessing时的<DictProxy object, typeid 'dict' at ; '__str__()' failed>
代码是想用multiprocessing做多进程的变量共享代码如下:from multiprocessing import Process, Managerfrom multiprocessing import queues# 每个子进程执行的函数# 参数中,传递了一个用于多进程之间数据共享的特殊字典f = codecs.open("exceptionFile.o", "a", "原创 2017-02-17 12:56:44 · 4018 阅读 · 0 评论 -
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position xx
代码如下:f = open('liudehua.txt', 'r')str = f.read()结果报错如下:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 521分析原因:我的txt文件存的是utf8编码,打开文件的时候没有指定编码,文件虽然是utf8编码,但是在计算机里面存储的还是u原创 2017-02-16 15:06:36 · 7386 阅读 · 1 评论 -
simplejson.scanner.JSONDecodeError: Extra data: line 1 column 22089 - line 1 column 22090
我的代码page = requests.get("http://www.sogou.com/kmap?query=%E9%99%88%E5%A5%95%E8%BF%85&from=relation&id=")pageJson = simplejson.loads(page.text)报了如下错误:Traceback (most recent call last): File "D原创 2017-02-10 18:57:24 · 6448 阅读 · 0 评论 -
基于phash和汉明距离找出相似图片
总共有接近2000w的词条,其中几百万的词条有摘要图片,一天接到运营反馈有些词条的摘要图显示内容为暂无图片,下面是一个case:所以,咱们需要找出几百万词条的摘要图片中显示为“暂无图片”的词条,并进行处理。具体思路如下第一步:从文件系统中获取词条的id和摘要图的url第二步:下载摘要图片到本地,并存储本地图片的名称和词条id的对应关系到文件,这里展示下下载并存储的核心方...原创 2017-02-22 11:26:52 · 6650 阅读 · 1 评论 -
使用argparse解析命令行参数
一个例子代码:文件名为:argparse_test.pyimport argparseparser = argparse.ArgumentParser()parser.add_argument('--para1', type=str, default='value1')parser.add_argument('--para2', type=str, default='value2')pa原创 2017-11-28 17:36:55 · 530 阅读 · 0 评论 -
Python的多进程锁的使用
很多时候,我们需要在多个进程中同时写一个文件,如果不加锁机制,就会导致写文件错乱这个时候,我们可以使用multiprocessing.Lock()我一开始是这样使用的:import multiprocessinglock = multiprocessing.Lock()class MatchProcess(multiprocessing.Process): def ...原创 2017-12-07 17:26:38 · 11323 阅读 · 0 评论 -
Python如何从内存中找回源代码
首先,项目必须在运行,代码必须驻留在内存中安装GDB(pyrasite需要)apt-getupdate&&apt-getinstallgdb安装pyrasite,它让你能够跟正在运行的进程通信pipinstallpyrasite安装uncomplyle6,它能让你获取内存中存在的对象的源代码pipinstalluncompyle...原创 2018-01-29 18:02:25 · 1538 阅读 · 0 评论 -
python线程卡死问题解决
1. top命令和日志方式判定卡死的位置python代码忽然卡死,日志不输出,通过如下方式可以确定线程确实已经死掉了:# top 命令top命令可以看到机器上所有线程的执行情况,%CPU和%MEM可以看出线程消耗的资源情况由于机器上线程数量太多,可能要查看的线程的信息在top命令当前屏幕上显示不出来可以通过如下方式查看在top命令下输入:u接下来会提示输入用户名,就可以查看...原创 2017-06-15 14:41:53 · 24172 阅读 · 2 评论 -
ElasticSearch通过Scroll方式遍历索引(Python代码)
当我们要查询的数据量过大的时候,用es的from+size的方式会报错,会提示你from+size不能大于10000那么可以用es的scroll方式,实际是一种深度分页机制直接上代码:#-*- coding:utf8 -*-from elasticsearch import Elasticsearch, helpersimport jsonimport pdbclass Elastic...原创 2018-04-04 17:50:04 · 8606 阅读 · 1 评论 -
调用多个thrift接口ttypes冲突的问题
我有一个thrift文件,名为importservice.thrift执行命令#thrift --gen py importservice.thrift生成了一个./gen-py/importservice目录该目录下有一个ImportService.py文件文件开头引入了from thrift.Thrift import TType, TMessageType, TException, TAp...原创 2018-04-24 17:33:59 · 2538 阅读 · 0 评论 -
客户端请求时间和服务端处理时间不匹配问题
现象: 客户端日志,调一个接口耗时为2-3s 服务端日志,处理一个请求耗时只有100-200ms问题: 这明显速度不匹配, 理论上差不了太多才对分析原因: 可能是服务端处理不过来,虽然一个请求服务端处理的时间很短,但是客户端请求响应的时间主要是消耗在等待被处理上目前客户端的进程数是25, 服务端的服务进程数是2....原创 2018-11-14 14:54:26 · 4938 阅读 · 0 评论 -
机器学习中遇到的问题
1、ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory找不到so库文件用自己的账户运行包会报上面的错误,但是用root账户运行却没有问题原因:root账户里面的LD_LIBRARY_PATH路径能找到这个so文件,但是自己的账户的LD_LIBRARY_PATH路...原创 2018-11-14 14:59:29 · 2406 阅读 · 0 评论 -
sklearn相关积累
sklearn的参考教程:https://morvanzhou.github.io/tutorials/machine-learning/sklearn/3-5-save/ 1、 解决的问题分类、回归、聚类和特征降维sklearn中有很多数据库可以用来练习 2、交叉验证: cross_val_score作用:用来评估模型的准确性,基于准确性,选择最好的模型。优势...原创 2018-11-14 15:02:54 · 473 阅读 · 0 评论 -
KMP算法、AC自动机算法的原理介绍以及Python实现
KMP算法要弄懂AC自动机算法,首先弄清楚KMP算法。这篇文章讲的很好:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html结合这篇文章,我说下我的理解比如如下查找,上面是原始串,下面是搜索串要从原始串中查找是否出现搜索串,现在已经查到ABCDAB...原创 2019-05-10 15:21:20 · 3058 阅读 · 0 评论