回调函数

python 并发编程之多进程

a 夏天 提交于 2020-03-15 04:30:33
一、数据共享 1.进程间的通信应该 尽量避免共享数据的方式 2.进程间的数据是独立的, 可以借助队列或管道实现通信,二者都是基于消息传递的。 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此。 命令就是一个程序,按回车就会执行(这个只是在windows情况下) tasklist 查看进程 tasklist | findstr pycharm #(findstr是进行过滤的),|就是管道(tasklist执行的内容就放到管道里面了, 管道后面的findstr pycharm就接收了) 二、进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。 多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个。。。手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。 那么什么是进程池呢?进程池就是控制进程数目 ps

scrapy框架

一世执手 提交于 2020-03-13 18:43:16
一、介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下 在Scrapy的数据流是由执行引擎控制,具体流程如下: 1、spiders产生request请求,将请求交给引擎 2、引擎(EGINE)吧刚刚处理好的请求交给了调度器,以一个队列或者堆栈的形式吧这些请求保存起来,调度一个出来再传给引擎 3、调度器(SCHEDULER)返回给引擎一个要爬取的url 4、引擎把调度好的请求发送给download,通过中间件发送(这个中间件至少有 两个方法,一个请求的,一个返回的), 5、一旦完成下载就返回一个response,通过下载器中间件,返回给引擎,引擎把response 对象传给下载器中间件,最后到达引擎 6、引擎从下载器中收到response对象,从下载器中间件传给了spiders

zepto源码研究 - callback.js

你离开我真会死。 提交于 2020-03-13 00:45:19
简要: $.Callbacks是一个生成回调管家Callback的工厂,Callback提供一系列方法来管理一个回调列表($.Callbacks的一个私有变量list),包括添加回调函数, 删除回调函数等等...,话不多说看正文: var memory, // Last fire value (for non-forgettable lists) fired, // Flag to know if list was already fired //是否回调过 firing, // Flag to know if list is currently firing //回调函数列表是否正在执行中 firingStart, // First callback to fire (used internally by add and fireWith) //第一回调函数的下标,启动回调任务的开始位置 firingLength, // End of the loop when firing //回调函数列表长度? firingIndex, // Index of currently firing callback (modified by remove if needed),正在执行回调函数的索引 list = [], // Actual callback list //回调数据源: 回调列表

ajax传值时各参数意义

老子叫甜甜 提交于 2020-03-12 07:46:22
$.ajax({ type:"GET", url:"test.json", data:{ username:$("#username").val(), content:$("#content").val() },//???这个data是发送到服务器的数据么 dataType:"json", success:function(data){//???这个data又是什么意思,和上面的那个data一样么 $('#restText').empty();//清空resText里面内容 var html=''; $.each(data, function( commentIndex, comment ){ html+='<div class="comment"><h6>'+comment['username']+':</h6><p class="para">'+comment['content']+'</p></div>'; }); $('#resText').html(html); } }); 第一个data就是发送给服务端的数据,success里面的data是服务器返回的数据 若dataType是json,这两个data里的数据都要是json格式的( JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式

并行,并发,串行,同步,异步,阻塞,非阻塞,同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

笑着哭i 提交于 2020-03-12 07:04:28
并行和并发 并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件(多核线程)在同一时刻发生;而并发是指两个或多个事件(进程或者程序)在同一时间间隔内发生。计算机在宏观上并发,微观上并行。 在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。 ①程序与计算不再一一对应,一个程序副本可以有多个计算 ②并发程序之间有相互制约关系,直接制约体现为一个程序需要另一个程序的计算结果,间接制约体现为多个程序竞争某一资源,如处理机、缓冲区等。 ③并发程序在执行中是走走停停,断续推进的。 网上找到一个简单的例子: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。 (来自作者:龚昱阳 Dozer,链接:https://www.zhihu.com/question/33515481/answer/58849148 来源:知乎。著作权归作者所有。商业转载请联系作者获得授权

Node.js 文件系统

时光怂恿深爱的人放手 提交于 2020-03-11 20:09:35
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。 建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。 创建 test.txt 文件 这是在test.txt中的内容 创建 main.js 文件 var fs=require("fs"); //异步 fs.readFile("test.txt",function(err,data){ if(err){ return console.error(err); } console.log("异步:"+data.toString()); }) //同步 var data=fs.readFileSync("test.txt"); console.log("同步:"+data.toString()); 异步模式下打开文件 fs.open(path, flags[, mode], callback) path - 文件的路径。 flags - 文件打开的行为。具体值详见下文。 mode - 设置文件模式(权限),文件创建默认权限为

使用ajax提交form表单,包括ajax文件上传

杀马特。学长 韩版系。学妹 提交于 2020-03-11 16:46:53
使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username}, success:function(data){ window.clearInterval(timer); console.log("over.."); }, error:function(e){ alert("错误!!"); window.clearInterval(timer); } }); 同样的,很多人也会。但是写的越多就越会发现,这样子虽然可以避免刷新页面,但是我们要写大量的js来到得数据: var username = $("#username").val(); var password = $("#password").val(); ... 如果数量少的话,那还没有什么,但是如果数据十分大的话,那就十分的麻烦,那有没有什么简单的方法呢?答案肯定有的!下面介绍两种方法,可以极大的提高开发人员的效率。 方法 方法一

node环境下express路由,

前提是你 提交于 2020-03-11 16:24:00
1.基本路由概念 路由 是指确定应用程序如何响应对特定端点的客户端请求,该请求是URI(或路径)和特定HTTP请求方法(GET,POST等)。 每个路由都可以有一个或多个处理函数,这些函数在路由匹配时执行。 路径定义采用以下结构: app.METHOD(PATH, HANDLER), app 是一个实例 express 。 METHOD 是一个 HTTP请求方法 ,小写。 PATH 是服务器上的路径。 HANDLER 是路由匹配时执行的功能。 2.请求前后台数据接受处理 app这里是一个继承过来的实例express对象 app.get(路径,(req,res)=>{})处理get请求; app.post(路径,(req,res=>{}))处理post请求; post请求的时候接受数据的时候通过 req.body进行接受; get 请求的时候接受数据的时候通过 req.query进行接受; 1、res.json([body]) 发送一个json的响应。这个方法和将一个对象或者一个数组作为参数传递给res.send()方法的效果相同。不过,你可以使用这个方法来转换其他的值到json,例如null,undefined。(虽然这些都是技术上无效的JSON)。 res.json(null); res.json({user:'tobi'}); res.status(500).json(

VTK_Learning_交互与Widget_观察者/命令模式

▼魔方 西西 提交于 2020-03-11 12:50:23
1.前言 一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(hhttp://www.paraview.org)、德国癌症研究中心研发的MITK(http://www.mitk.org)等开源软件系统都提供了强大的交互功能,作为ParaView、MITK等软件构件基础的VTK同样也提供了各种各样的交互功能。 VTK的交互除了可以监听来自鼠标、键盘等外部设备的消息,还可以在渲染场景中生成功能各异的交互部件(Widget),用于控制可视化过程的参数,达到用户的渲染要求。 2.观察者/命令模式(Observe/Command) 观察者/命令模式是VTK里用的比较多的设计模式。 VTK中绝大多数的类都派生自vtkObject。查看类vtkObject的接口可以找到AddObserve()、RemoveObserve()、GetCommand()等函数。 观察者/命令模式是指一个Object可以有多个Observe,他定义了对象间的一种“一对多”的依赖关系, 当一个Object对象的状态发生改变时,所有依赖于它的Observe对象都得到通知而被自动更新。命令模式属于对象行为模式,他将一个请求封装为一个对象,并提供一致性发送请求的接口,当一个事件发生时,他不直接把事件传递给事件调用者,而是在命令和调用者之间增加一个中间者,讲这种直接关系切断

jQuery Ajax 相关知识一

核能气质少年 提交于 2020-03-10 20:06:30
一、Ajax请求 1、jQuery.ajax([options]) 通过 HTTP 请求加载远程数据。 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。 最简单的情况下,$.ajax()可以不带任何参数直接使用。 注意 ,所有的选项都可以通过$.ajaxSetup()函数来全局设置。 回调函数 如果要处理$.ajax()得到的数据,则需要使用回调函数。beforeSend、error、dataFilter、success、complete。 beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。 error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话) dataFilter 在请求成功之后调用。传入返回的数据以及"dataType"参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数。 success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。 complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象