回调函数

python线程池

匿名 (未验证) 提交于 2019-12-02 22:51:30
线程池原理 1.控制线程,系统可以创建的线程数量有限,如果创建的线程资源数量不能够很好的加以限制,反而会导致系统性能的下降。 2.管理线程,对线程资源的重复利用。 3.提高响应速度:任务到达时,任务可以不需要等到线程创建就能立即执行。 线程池, 通俗的理解就是有一个池子,里面存放着已经创建好的线程资源,当有任务提交给线程池执行时,池中的某个线程就会主动执行该任务,执行完任务后该线程就会继续回到池子中等待下次任务的执行。下面我们就来看一下线程池的基本原理图,如下: 线程池的使用 concurrent.futures 线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。 如果使用线程池/进程池来管理并发编程,那么只要将相应的 task 函数提交给线程池/进程池,剩下的事情就由线程池/进程池来搞定。 Exectuor 提供了如下常用方法: submit(fn, *args, **kwargs):将 fn 函数提交给线程池。*args 代表传给 fn 函数的参数,*kwargs 代表以关键字参数的形式为 fn 函数传入参数。

Python快速开发分布式搜索引擎Scrapy精讲―scrapy模拟登陆和知乎倒立文字验证码识别

匿名 (未验证) 提交于 2019-12-02 22:51:30
第一步。首先下载,大神者也的倒立文字验证码识别程序 下载地址: https://github.com/muchrooms/ ... 注意:此程序依赖以下模块包   Keras==2.0.1   Pillow==3.4.2   jupyter==1.0.0   matplotlib==1.5.3   numpy==1.12.1   scikit-learn==0.18.1   tensorflow==1.0.1   h5py==2.6.0 numpy-1.13.1+mkl 我们用豆瓣园来加速安以上依赖装如: pip install -i https://pypi.douban.com/simple h5py==2.6.0 如果是win系统,可能存在安装失败的可能,如果那个包安装失败,就到 http://www.lfd.uci.edu/~gohlk ... 找到win对应的版本下载到本地安装,如: pip install h5py-2.7.0-cp35-cp35m-win_amd64.whl 第二步,将者也的,验证码识别程序的zheye文件夹放到工程目录里 如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理

python3.6异步IO包asyncio部分核心源码思路梳理

匿名 (未验证) 提交于 2019-12-02 22:51:30
关于python异步编程的演进过程,两篇文章阐述得妥妥当当,明明白白。 中文资料:https://mp.weixin.qq.com/s?__biz=MzIxMjY5NTE0MA==&mid=2247483720&idx=1&sn=f016c06ddd17765fd50b705fed64429c 英文资料:http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html 其实中文资料就是参考的英文资料,英文资料是开源书《 500 Lines or Less 》中的一个主题章节,整书地址:https://github.com/aosabook/500lines python的asyncio源码的核心思路其实跟基于生成器的协程异步编程思路大体一致,只是前者做了大量的代码优化和功能扩充。所以对照生成器协程代码来理解asyncio是很有帮助的。以下的这一小段代码就是采用基于生成器的协程的异步编程方式写的一个小爬虫案例,来自上述中文资料,asyncio的核心代码的思路大体上能从这段代码中找到原型。 该脚本命名为:yield_from.py import socket from selectors import DefaultSelector, EVENT_READ, EVENT_WRITE selector =

教你用Python爬虫爬取知乎妹子信息,还愁找不到女朋友吗?

匿名 (未验证) 提交于 2019-12-02 22:51:30
Python模拟爬虫抓取知乎用户信息以及人际拓扑关系,使用scrapy爬虫框架,数据存储使用mongo数据库。 既然需要用到scrapy爬虫框架,那就来科普一下scrapy爬虫框架吧~ Scrapy:1、Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取 web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 2、Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。 (科普完啦~咱回归正题~) 爬虫项目部署:   进入zhihu_spider后执行```docker-compose up``` ,进入container后和本地运行方法相同,依次启动mongo、rabbitmq、异步任务、爬虫进程即可。 其它需要说明的问题:   爬虫框架从start\_requests开始执行,此部分会提交知乎主页的访问请求给引擎,并设置回调函数为post_login.   post\_login解析主页获取\_xsrf保存为成员变量中,并提交登陆的POST请求,设置回调函数为after\_login.   after\_login拿到登陆后的cookie,提交一个start\

python之FTP上传和下载

匿名 (未验证) 提交于 2019-12-02 22:51:08
# FTP操作 #import ftplib from ftplib import FTP host = '192.168.20.191' username = 'ftpuser' password = 'ftp123' file = '1.txt' #f = ftplib.FTP(host) # 实例化FTP对象 f = FTP(host) # 实例化FTP对象 f.login(username, password) # 登录 # 获取当前路径 pwd_path = f.pwd() print("FTP当前路径:", pwd_path) # 逐行读取ftp文本文件 # f.retrlines('RETR %s' % file) def ftp_download(): '''以二进制形式下载文件''' file_remote = '1.txt' file_local = 'D:\\test_data\\ftp_download.txt' bufsize = 1024 # 设置缓冲器大小 fp = open(file_local, 'wb') f.retrbinary('RETR %s' % file_remote, fp.write, bufsize) fp.close() def ftp_upload(): '''以二进制形式上传文件''' file_remote = 'ftp

Linux 网络编程―― libpcap 详解

匿名 (未验证) 提交于 2019-12-02 21:59:42
概述 libpcap 是一个 网络数据包捕获函数库 ,功能非常强大,Linux 下著名的 tcpdump 就是以它为基础的。 libpcap主要的作用 1)捕获各种数据包,列如:网络流量统计。 2)过滤网络数据包,列如:过滤掉本地上的一些数据,类似防火墙。 3)分析网络数据包,列如:分析网络协议,数据的采集。 4)存储网络数据包,列如:保存捕获的数据以为将来进行分析。 libpcap 的安装 libpcap 的抓包框架 pcap_lookupdev() :函数用于查找网络设备,返回可被 pcap_open_live() 函数调用的网络设备名指针。 pcap_lookupnet() :函数获得指定网络设备的网络号和掩码。 pcap_open_live() : 函数用于打开网络设备,并且返回用于捕获网络数据包的数据包捕获描述字。对于此网络设备的操作都要基于此网络设备描述字。 pcap_compile() : 函数用于将用户制定的过滤策略编译到过滤程序中。 pcap_setfilter() :函数用于设置过滤器。 pcap_loop() :函数 pcap_dispatch() 函数用于捕获数据包,捕获后还可以进行处理,此外 pcap_next() 和 pcap_next_ex() 两个函数也可以用来捕获数据包。 pcap_close() :函数用于关闭网络设备,释放资源。 利用

【原创】Linux cpu hotplug

匿名 (未验证) 提交于 2019-12-02 21:56:30
Read the fucking source code! --By ³Ѹ A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio Linux CPU热插拔,支持在系统启动后,关闭任意一个 secondary cpu (在ARM架构中,CPU0为 boot cpu ,不能被关闭),并在需要时重新打开它。 CPU-hotplug 的一个用处是,支持SMP的 Suspend 和 Resume ,这个也是我看 CPU-hotplug 的原因。 代码路径: include/linux/cpuhotplug.h kernel/cpu.c kernel/smpboot.c arch/arm64/kernel/smp.c 关键的数据结构有三种,如下图所示: struct cpuhp_cpu_state :用来存储hotplug的状态; enum cpuhp_state :枚举各种状态,这个会对应到全局数组中的某一项,而该项中会定义回调函数。当然,也可以通过函数接口来设置回调函数。 struct cpuhp_step :Hotplug state machine step,主要定义了函数指针,当跳转到某一个状态时会回调。

linux中__weak关键字

匿名 (未验证) 提交于 2019-12-02 21:56:30
[转载] linux中__weak关键字的作用解析 https://www.2cto.com/kf/201810/784218.html 在linux的驱动代码中经常可以看到__weak去修饰一个函数或者变量,大多是用来修饰函数。 它的作用有两个: 1.weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为 “弱函数” 。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 2.__weak 在 回调函数 的时候经常用到。这样的好处是,系统默认定义了一个空的回调函数,保证编译器不会报错。同时,如果用户自己要定义用户回调函数,那么只需要重新定义即可,不需要考虑函数重复定义的问题,使用非常方便

JQuery中的AJAX

匿名 (未验证) 提交于 2019-12-02 21:53:52
$.ajax({ url:"http://www.microsoft.com", //请求的url地址 dataType:"json", //返回格式为json async:true,//请求是否异步,默认为异步,这也是ajax重要特性 data:{"id":"value"}, //参数值 type:"GET", //请求方式 beforeSend:function(){ //请求前的处理 }, success:function(req){ //请求成功时处理 }, complete:function(){ //请求完成的处理 }, error:function(){ //请求出错处理 } }); ajax方法常用参数 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换

JS运行机制

匿名 (未验证) 提交于 2019-12-02 21:53:52
前言 前端小白学习总结,欢迎讨论和指导。 本文从JS是单线程开始,到JS为了提高效率,使用异步,到JS如何实现异步,再到浏览器是如何配合JS执行异步。最后提到了一个任务队列的优先级问题。 本文是学习JS运行机制中捋出来的思路,有点层层递进的感觉,难免有理解错误或表述不当的地方。如果能帮助到看到这篇的你,我很感激。 一、JS是单线程。 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个。不妨叫它 主线程 。 选择单线程的原因之一是JS要操作DOM,如果多线程可能造成执行混乱。经典栗子来了,有要删除节点的函数,有要操作节点的。万一多线程执行顺序乱了就坏了。 二、JS的异步 单线程使得JS引擎只能一个任务结束再执行下一个,如果某任务时间较长,就会发生阻塞。为了解决这个问题。JS也使用了异步编程。 简单说下同步(synchronous)和异步(asynchronous)。 同步和异步通常是用来形容一个函数被调用时发生的行为。 同步函数被调用时,调用必须获得预期结果后,才能继续后续行为。比如,下面这个(毫无营养的)函数, var synFunc = function(description){ var str = "you are"; str = str + description; consoloe.log(str); } synFunc("great");