-
[生产力] 多台计算机共用键盘鼠标-Synergy
2020-05-20 17:21:43Synergy 是跨平台、多计算机协同软件,可以实现以下功能: 多计算机共用键盘鼠标 多计算机共用剪切板 多计算机文件拖拽复制(付费) 官方下载链接 需要注册和购买 https://symless.com/synergy 第三方免费下载...Synergy 是跨平台、多计算机协同软件,可以实现以下功能:
- 多计算机共用键盘鼠标
- 多计算机共用剪切板
- 多计算机文件拖拽复制(付费)
官方下载链接 需要注册和购买 https://symless.com/synergy
第三方免费下载链接:https://www.brahma.world/synergy-stable-builds/
github 源代码:https://github.com/brahma-dev/synergy-stable-builds
-
计算机网络 物理层 实现的功能详解
2020-08-09 16:15:28# 物理层的四个特性描述 机械、电气、功能和过程# 通信模型两大模型 局域网:数字信号 广域网:光纤型号# 数据通信常用术语 信息(message)、数据(data)、信号(signal)、码元 (code) 模拟信号 (analogous ... -
计算机网络初级教程下载
2010-02-25 15:03:34本书共20章,分为五大部分。...本书主要供高等院校计算机专业高年级本科生和低年级硕士研究生作为计算机网络课程的教材使用,同时也可供计算机网络设计人员、开发人员以及管理人员作为技术参考书使用。 -
C#版 模拟win7的简单计算机功能
2013-03-13 13:15:10用C#写的简单计算器,实现的功能还是蛮多的.欢迎下载参考 -
Java实现文件下载功能
2020-03-08 16:46:37上一篇介绍了文件上传,传送门:Java实现文件上传功能,这次简单介绍一下文件下载功能 实现思路 文件下载简单来说就是在读取文件的基础上多了一层与HTTP的通信,因此流程的改变如下: 原:与计算机文件系统交互 ...前言
上一篇介绍了文件上传,传送门:Java实现文件上传功能,这次简单介绍一下文件下载功能
实现思路
文件下载简单来说就是在读取文件的基础上多了一层与HTTP的通信,因此流程的改变如下:
原:与计算机文件系统交互
现:与HTTP通信交互→与计算机文件系统交互
实现代码
重点会写在注释中,下面直接贴代码
1、业务层 (省略类的代码,此处只有方法)
public void downloadLogFile(HttpServletRequest request, HttpServletResponse response) { try { //从网站上下载文件时,需要知道下载的是哪一个文件,因此需要获取文件名称(包括后缀) String logNameReq = request.getParameter("logName"); //关键点,需要获取的文件所在文件系统的目录,定位准确才可以顺利下载文件 String filePath = "D:\\" + logNameReq; File file = new File(filePath); //创建一个输入流,将读取到的文件保存到输入流 InputStream fis = new BufferedInputStream(new FileInputStream(filePath)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); // 重要,设置response的Header response.setHeader("Content-Disposition", "attachment;filename=" + new String(logNameReq.getBytes())); response.setHeader("Content-Length", "" + file.length()); //octet-stream是二进制流传输,当不知文件类型时都可以用此属性 response.setContentType("application/octet-stream"); //跨域请求,*代表允许全部类型 response.setHeader("Access-Control-Allow-Origin", "*"); //允许请求方式 response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); //用来指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求 response.setHeader("Access-Control-Max-Age", "3600"); //请求包含的字段内容,如有多个可用哪个逗号分隔如下 response.setHeader("Access-Control-Allow-Headers", "content-type,x-requested-with,Authorization, x-ui-request,lang"); //访问控制允许凭据,true为允许 response.setHeader("Access-Control-Allow-Credentials", "true"); //创建一个输出流,用于输出文件 OutputStream oStream = new BufferedOutputStream(response.getOutputStream()); //写入输出文件 oStream .write(buffer); oStream .flush(); oStream .close(); System.out.println("下载日志文件" + logNameReq +"成功"); } catch (Exception e) { System.out.println("下载日志文件出错,错误原因:" + e); } }
2、控制层 (省略类的代码,此处只有方法)
//此处一定要使用Get请求,因为Get与Post对于文件下载这一功能的前后端实现都不一样 @GetMapping("/downloadlog") public void downloadLog(HttpServletRequest request, HttpServletResponse response) { service.downloadLogFile(request, response); }
注意事项
前端调用文件下载接口时,不要用封装好的Get请求直接访问,因为文件下载与普通的get请求有稍许差别,使用window.location访问即可
-
OpenWRT 路由器实现浏览器下载文件到计算机
2016-11-05 14:39:59OpenWRT 路由器实现浏览器下载文件到计算机在从路由器中下载文件时要用到此功能,比如说要备份路由器中的配置文件,下载路由器中的日志到本地等等都需要使用到该方法要下载路由器中的文件到本地,最好的方法是在...OpenWRT 路由器实现浏览器下载文件到计算机
在从路由器中下载文件时要用到此功能,比如说要备份路由器中的配置文件,下载路由器中的日志到本地等等都需要使用到该方法
要下载路由器中的文件到本地,最好的方法是在路由器中搭建一个http服务器
路由器中搭建http服务器的软件有很多,今天我们说uhttpd这个软件,openwrt自带的应该就是这个,因为luci管理界面需要用到它,因此不需要额外再安装了,比较方便
查看现有的http服务
路由器中一般都有现成的http服务程序,因为luci web管理界面需要用到它
在路由器中输入ps | grep uhttpd
,可以看到如下两个进程,第一个为系统自带,用来提供web界面的访问,第二个则是我后面加入的用来做文件传输服务的,下面我们来介绍配置uhttp的方法root@Router:~# ps | grep uhttpd 1307 root 1600 S /usr/sbin/uhttpd -f -h /www -r KFRouter -x /cgi-bin -u /ubus -t 60 -T 30 -k 2 1308 root 1148 S /usr/sbin/uhttpd -f -h /download -r KFRouter -x /cgi-bin -n 3 -p 0.0.0.0:81 19069 root 1472 S grep uhttpd
配置uhttpd服务
在路由器中输入
cat /etc/config/uhttpd
得到如下信息,其中 uhttpd ‘main’的section为提供web界面的配置,而uhttpd ‘download’则是我们为文件下载配置的服务,- 其中listen_http的值填写
0.0.0.0:81
81就是http服务要监听的端口,下载文件时的端口要写对,0.0.0.0指向路由器网关地址 - 其中home的值为web服务器的路径,只用该路径下的文件才能被下载
- 比如现在我要下载路由器中
/download/test.log
文件,那么只需要在浏览器中输入http://192.168.X.X:81/test.log
即可(其中192.168.X.X为路由器网关地址)
config uhttpd 'main' list listen_http '0.0.0.0:80' list listen_http '[::]:80' list listen_https '0.0.0.0:443' list listen_https '[::]:443' option redirect_https '1' option home '/www' option rfc1918_filter '1' option max_requests '3' option max_connections '100' option cert '/etc/uhttpd.crt' option key '/etc/uhttpd.key' option cgi_prefix '/cgi-bin' option script_timeout '60' option network_timeout '30' option http_keepalive '20' option tcp_keepalive '1' option ubus_prefix '/ubus' config cert 'px5g' option days '730' option bits '1024' option country 'ZZ' option state 'Somewhere' option location 'Uknown' option commonname 'OpenWrt' config uhttpd 'download' list listen_http '0.0.0.0:81' option home '/download' option cgi_prefix '/cgi-bin'
配置修改完毕后重启服务
配置修改后使用
/etc/init.d/uhttpd restart
重启服务就可以了 - 其中listen_http的值填写
-
计算机监控技术与系统开 配套源代码下载
2011-07-16 23:40:49重点:根据以前所学知识,结合通用多功能计算机监控系统测试软件,开发一个仿真数字I/O模块,使学生可以通过发送数据包来控制开关的打开与闭合、获取其状态并进行显示。 第十四章 主控程序的设计与开发(1学时) ... -
Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等)
2021-02-10 12:45:37Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等) 目录 Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等...Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等)
目录
Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等)
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet 开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
本节简单介绍,使用 python 中多任务,协程的功能,进行下载网络文件的简单功能应用。
协程概念
协程,又称微线程,纤程。英文名Coroutine。
协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。
通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定
协程和线程差异
在实现多任务时, 线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。 操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。
greenlet、
gevent
greenlet已经实现了协程,但是这个还的人工切换,是不是觉得太麻烦了,不要捉急,python还有一个比greenlet更强大的并且能够自动切换任务的模块
gevent
其原理是当一个greenlet遇到IO(指的是input output 输入输出,比如网络、文件操作等)操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。
由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO
进程、线程、协程对比
请仔细理解如下的通俗描述
-
有一个老板想要开个工厂进行生产某件商品(例如剪子)
-
他需要花一些财力物力制作一条生产线,这个生产线上有很多的器件以及材料这些所有的 为了能够生产剪子而准备的资源称之为:进程
-
只有生产线是不能够进行生产的,所以老板的找个工人来进行生产,这个工人能够利用这些材料最终一步步的将剪子做出来,这个来做事情的工人称之为:线程
-
这个老板为了提高生产率,想到3种办法:
-
在这条生产线上多招些工人,一起来做剪子,这样效率是成倍増长,即单进程 多线程方式
-
老板发现这条生产线上的工人不是越多越好,因为一条生产线的资源以及材料毕竟有限,所以老板又花了些财力物力购置了另外一条生产线,然后再招些工人这样效率又再一步提高了,即多进程 多线程方式
-
老板发现,现在已经有了很多条生产线,并且每条生产线上已经有很多工人了(即程序是多进程的,每个进程中又有多个线程),为了再次提高效率,老板想了个损招,规定:如果某个员工在上班时临时没事或者再等待某些条件(比如等待另一个工人生产完谋道工序 之后他才能再次工作) ,那么这个员工就利用这个时间去做其它的事情,那么也就是说:如果一个线程等待某些条件,可以充分利用这个时间去做其它事情,其实这就是:协程方式
-
简单总结:
-
进程是资源分配的单位
-
线程是操作系统调度的单位
-
进程切换需要的资源很最大,效率很低
-
线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)
-
协程切换任务资源很小,效率高
-
多进程、多线程根据cpu核数不一样可能是并行的,但是协程是在一个线程中 所以是并发
二、实现原理
1、gevent 进行协程多任务
2、urllib 获取网上资源文件
3、文件读写,下载网上的文件保留本地
三、注意事项
1、在使用 gevent 协程多任务的时候,要把耗时操作进行替换
# 有IO才做时需要这一句 monkey.patch_all() # 将程序中用到的耗时操作的代码,换为gevent中自己实现的模块
四、效果预览
五、实现步骤
1、打开 pycharm 新建一个工程,即可新建一个python文件
2、网上找一些可下载的资源路径,编写脚本,实现协程下载网络资源
3、运行脚本可以写成多任务下载资源
六、关键代码
import gevent from gevent import monkey import urllib.request # 有IO才做时需要这一句 monkey.patch_all() # 将程序中用到的耗时操作的代码,换为gevent中自己实现的模块 def my_download(file_name, url): """ 网上获取数据,并保存本地 :param file_name: 保存的文件名 :param url: 网址 :return: """ print("Get : %s " % url) resp = urllib.request.urlopen(url) data = resp.read() with open(file_name, "wb") as f: f.write(data) print(file_name, "save ok, %d bytes received from %s." % (len(data), url)) def main(): # 添加所有协程任务,并等待各个协程任务结束 gevent.joinall([ gevent.spawn(my_download, "1.jpg", "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=617100489,3848171650&fm=26&gp=0.jpg"), gevent.spawn(my_download, "2.jpg", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdik.img.kttpdq.com%2Fpic%2F3%2F1812%2F15cdcfba19bd15b4_1680x1050.jpg&refer=http%3A%2F%2Fdik.img.kttpdq.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1615523263&t=8ef1c78524053592f5f8148b83def2c4"), gevent.spawn(my_download, "3.jpg", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdik.img.kttpdq.com%2Fpic%2F3%2F1630%2Fe5428d952b120906.jpg&refer=http%3A%2F%2Fdik.img.kttpdq.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1615523263&t=0f8853c8f464a7f3641aadf3423bf75d") ]) if __name__ == '__main__': main()
-
-
【计算机基础】下载过的软件集合
2019-10-09 05:46:39IDE就像服务人员,有按摩店的,有澡堂子的,还有某天盛宴的,提供的服务也有很多种; 编辑器的本质是可以写字符就行,像windows自带的写字板就是最简单的编辑器,他的识别级别在文字级,他只显示你想写入,和打开的文本... -
多功能编程算法转换器绿色免费版
2019-07-27 21:40:18多功能算法转换器是一款可以帮助用户快速查询不同计算机语言实现不同功能的语言语法,对于程序员来说,这款软件是非常好用的一款软件,离线集成了主流语言的N多常用的编程算法,让用户可以快速调用和查找,节省了... -
Visual C#设计多功能关机程序
2019-10-08 02:44:32visual C#来编写一个多功能的关机程序。该程序具有:定时关机、倒计时关机、关机提醒、系统信息获取等四项功能, 可设定关机时间精确到秒。并且让你很快掌握Visual C#中对API的操作程序。 一. 设计关闭Windows... -
SCOM2012功能测试(2)—导入MP并监控Windows计算机
2013-11-06 19:55:5502.导入管理包并监控Windows计算机管理包是SCOM的灵魂,管理包内容越丰富,相应监视的内容也就越多。管理包MP的获取途径:1.从微软MP目录下载;2.从第三方开发商获得;3.自己开发MP,以下是我从微软官网下载的... -
佳能canon mg6400多功能一体机驱动 v1.02 官方最新版
2020-07-04 21:53:40佳能mg6400驱动是面向canonmg6400多功能一体机用户推出的一款打印机驱动安装程序。支持win7、win8等计算机系统环境。...产品介绍佳能MG6400是一款喷墨多功能照片一体机,这款驱动是佳能官方发,欢迎下载体验 -
activemq 实例_在一台计算机上运行多个ActiveMQ实例
2020-06-13 05:05:52activemq 实例 几周前,我再次通过Mule ESB解决... 为了能够测试这些最后的东西,我需要在计算机上多次安装ActiveMQ。 幸运的是,尽管ActiveMQ站点上的文档非常少,但这并不是很难实现的。 第一步是下载并解压... -
EDA/PLD中的基于FPGA LPM多功能信号发生器设计
2020-10-21 17:03:04ROM 模块和VHDL 语言为核心设计一个多功能信号发生器,根据输入信号的选择可以输出递增锯齿波、递减锯齿波、三角波、阶梯波和方波等5 种信号,通过QuartusII 软件进行波形仿真、定时分析,仿真正确后,利用实验板... -
Windows快捷精灵(多功能快捷方式软件)v6.8免费安装版
2019-08-06 05:55:47Windows快捷精灵是一款提供快捷方式的多功能软件。Windows快捷精灵带有计算器和电子日历、光驱开与关、重新启动计算机,关闭计算机快捷键、网络搜索工具、安全助手、系统信息、系统多媒体、新增屏幕抓捕软件,等快捷... -
联想(lenovo)M7020多功能一体机驱动程序ForWin98SEME2000XP
2019-07-25 20:33:14Lenovo联想M7020多功能一体机最新驱动For Win98SE/ME/2000/XP(2007年3月29日发布)如果以前安装过驱动,请先卸载,或运行Delinf32.exe。安装方法:1.下载驱动,并解压到指定目录。2.与计算机连接,并打开电源。3.... -
【转载】使用jsp实现文件上传到服务器或者从服务器上下载文件到本地计算机完整说明版
2014-07-23 02:59:42很多同学在使用jsp实现文件上传到服务器或者从服务器上下载文件到本地计算机这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。 准备工作: 1. 到网上下载两个包 第一个叫做commons-fileupload-1.2.1.... -
计算机操作系统大作业—进程控制模块的模拟和实现(java版本),写的很简单,谨慎下载
2018-12-27 21:44:14但由于时间仓促,而且自己也懒得写那么多,所以项目仅仅实现了进程创建、简单的资源分配、进程阻塞(这个功能实现的很烂)、进程按优先级获取cpu时间片。 压缩包中包含了项目源代码以及详细的注释,另外我使用exe4j... -
显示/光电技术中的LED多功能遥控显示屏设计与实现
2020-10-20 16:59:42摘要:LED多功能显示屏系统采用动态扫描的方法,以STC89C58RD+单片机作为主控芯片,利用自制的红外遥控器无线下载信息到主机显示.显示屏由1024只高亮发红光二极管构成的16×64点阵组成,行扫描电路采用74HC154译码器... -
IDM最强大的多线程下载器 Internet Download Manager v2021 中文版+超多皮肤
2020-12-18 15:04:20由于连接丢失、网络问题、计算机关机或意外电源故障,完整的错误恢复和恢复功能将重新启动中断或中断的下载。简单的图形用户界面使IDM用户友好且易于使用。Internet Download Manager(IDM)有一个智能下载逻辑加速... -
计算机论文
2018-05-31 22:15:57重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了。怕麻烦的话,还能用它自带的降重功能。哦对了,他们现在正在做毕业季活动, 赠送很多免费字数,可以说是十分划算了!地址... -
《Flash动画制作技术》多媒体CAI课件交互功能实现-现代教育技术论文-教育论文x_多媒体ppt课件
2020-12-12 11:58:35Flash动画制作技术多媒体CAI课件交互功能实现-现代教育技术论文-教育论文 文章均为WORD文档下载后可直接编辑使用亦可打印 1 课件开发背景 Flash动画制作技术课程是我院计算机多媒体技术专业一门专业核心课程该课程的... -
组态软件 力控7.0 力控7.1 力控7.2 硬件狗 USB加密锁 分享 下载 授权 全功能
2020-06-24 15:21:04力控组态软件是一款功能强大的监控组态软件。该软件支持通过GPRS、CDMA网络与控制设备或其他远程力控节点通讯,力控移动数据服务器与设备...如果使用RS485总线,还可实现一对多台计算机(1:N方式)的通信,同时也可以. -
Visual C#设计多功能关机程序(1)
2005-12-15 18:01:00现在我们用visual C#来编写一个多功能的关机程序。该程序具有:定时关机、倒计时关机、关机提醒、系统信息获取等四项功能, 可设定关机时间精确到秒。并且让你很快掌握Visual C#中对API的操作程序。 一. 设计关闭... -
计算机技能简览Mark
2016-10-28 11:15:44操作系统 管理和控制计算机硬件与软件资源的...利用通信设备和线路将地理位置不同、功能独立的多个计算机系统互联起来,以功能完善的网络软件实现网络中资源共享和信息传递的系统,它是计算机基础知识的重要分支。
-
MySQL 管理利器 mysql-utilities
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
国外数字图像处理总结笔记.zip
-
宪法学--期末复习习题(含答案).pdf
-
w3cschoolc语言3.zip
-
浙江科技学院《线性代数》06-14年历年期末考试试卷(含答案).pdf
-
MySQL 高可用工具 DRBD 实战部署详解
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
西南科技大学《高等数学B2》期末考试试卷(含答案).pdf
-
centos安装python3
-
西南科技大学《电力电子技术》期末复习题(含答案 精心整理版).pdf
-
注解与反射
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
浙江科技学院《钢结构设计》期末考试题(部分 含答案).pdf
-
西南科技大学模电试题-选择、判断填空.pdf
-
22--方法的递归
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
浙江科技学院《电工学》复习资料(含答案).pdf
-
app软件测试全栈系列精品课程
-
Windows系统管理