首页
直播
壁纸
友链
Search
1
一个超好用的图床
5,079 阅读
2
网页版朋友圈程序 – LAN (现已发布)
2,124 阅读
3
给大家分享几个实用网站
1,336 阅读
4
域名在QQ内打开提示'非官方页面'的解决方法
988 阅读
5
超简洁的个人主页引导页 全网首发
961 阅读
休闲娱乐
资源分享
编程技术
人工智能
登录
Search
标签搜索
python
苏画
个人导航
资源分享
个人主页
教程
苏画主页
Github
人脸识别
宝塔
爬虫
api
接口
苏画导航
导航
苏画个人导航
苏画个人主页
白嫖
opencv
微博
苏画
累计撰写
51
篇文章
累计收到
597
条评论
首页
栏目
休闲娱乐
资源分享
编程技术
人工智能
页面
直播
壁纸
友链
搜索到
51
篇与
苏画
的结果
2021-01-04
支付宝当面付(PHP Demo)小白教程
1.先找到蚂蚁金服开发平台下载Demo(地址:https://docs.open.alipay.com/194/105201/)2.用支付宝工具去生成一个公钥和私钥(工具地址:https://docs.open.alipay.com/291/105971/)3.把下载下来的Demo解压后打开config.php文件把生成的私钥跟支付宝给你的支付宝公钥填写上。注意的是私钥生成的时候要把私钥保存好。(文件位置:dangmianfu_demo_php/f2fpay/config)3.1)这里是查看自己的APP_ID和支付公钥(地址:https://openhome.alipay.com/platform/keyManage.htm)4.现在开打f2fpay/qrpay_test.php文件这里可以把一些不需要的参数可以去掉(把必填的参数留住就行)4.1)填写完成后接下来就可以测试一下了,下面是访问我的本地测试地址(localhost/ailpay/dangmianfu_demo_php/f2fpay/qrpay_test.php)4.2)点击确定后如果成功了就会返回二维码地址给你注意:如果失败不返回就去检查一下你的公钥和私钥APP_ID是否正确4.3)返回的二维码地址是访问不到二维码的。需要用工具生成。这里我使用的是phpqrcode (下载地址:https://sourceforge.net/projects/phpqrcode/)下载下来以后把phpqrcode.php文件拖到你的项目目录里面。在f2fpay/qrpay_test.php文件里面加载工具文件进来。4.4)点击确定后如果成功了就会返回支付宝二维码给你看看扫出的钱是否与你填写的金额相同就行。5.回调方法5.1)自己写一个回调方法然后在config.php配置文件里面填写好。5.2)还需要在 f2fpay/service/AlipayTradeService.php文件中添加回调信息。5.3)回调方法用于如果支付成功就会给返回订单号。根据订单号更改订单状态即可。6.接下来就是需要把logo加入到二维码中间和把图片保存到本地的。6.1)在f2fpay/qrpay_test.php文件中生成二维码成功的时候来对图片处理,首先准备好需要放到二维码中间的logo图片存放到项目的某个目录下。蚂蚁技术支持中心-故障排查云排查
2021年01月04日
271 阅读
0 评论
2 点赞
2021-01-03
解决jsdelivr+github图床访问失效问题
问题描述:如果太久没更新github仓库,可能会导致原本已经上传了好久的一些图片访问失效。报错如下:Package size exceeded the configured limit of 50 MB. Try https://github.com/LuckyZmj/imgbed/tree/master/posts/20201102202808.png instead.解决方法:在jsdelivr图片链接中的github仓库名后添加@master即可例子:以github仓库名为imgbed为例 访问失效的图片链接: https://cdn.jsdelivr.net/gh/LuckyZmj/imgbed/posts/20201102202808.png 添加@master后的链接: https://cdn.jsdelivr.net/gh/LuckyZmj/imgbed@master/posts/20201102202808.png
2021年01月03日
272 阅读
0 评论
0 点赞
2021-01-02
宝塔nginx配置文件伪静态,隐藏index.php
可以直接修改配置文件,如下图.找到/www/server/panel/vhost/rewrite/你的域名.conf编辑这个文件,里面内容为location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }当然,也可以在宝塔后台,网站列表,设置中添加伪静态或网站管理中设置另外.宝塔nginx的配置文件在/www/server/panel/vhost/nginx 这里修改
2021年01月02日
144 阅读
0 评论
0 点赞
2020-12-28
导入pygame时出现的问题:显示版本号和欢迎界面
导入pygame时出现的问题,见下方代码>>> import pygame pygame 1.9.4 Hello from the pygame community. https://www.pygame.org/contribute.html不是报错, 仅仅只是欢迎而已, 如果你不想看到欢迎语句, 以下会教你如何删去这两句话:找到你Python的安装路径, 按照下图的路径, 找到这个__init__.py文件:以任意文本编辑器(此处是notepad++)打开找到最后两行, 注释掉, 按ctrl+s即可:再次导入,就没有欢迎语句了:彩蛋!!放上pygame中__init__.py中的结语:Thanks for supporting pygame. Without support now, there won't be pygame later.
2020年12月28日
84 阅读
0 评论
0 点赞
2020-12-28
Python多线程并发实例及其优化
这篇文章主要介绍了python多线程并发实例及其优化,threading是扩展模块,在thread的基础上进行了封装及改进。所以只需要使用threading这个模块就能完成并发的测试,需要的朋友可以参考下单线程执行python的内置模块提供了两个内置模块:thread和threading,thread是源生模块,threading是扩展模块,在thread的基础上进行了封装及改进。所以只需要使用threading这个模块就能完成并发的测试实例创建并启动一个单线程import threading def myTestFunc(): print("我是一个函数") t = threading.Thread(target=myTestFunc) # 创建一个线程 t.start() # 启动线程执行结果C:\Python36\python.exe D:/MyThreading/myThread.py 我是一个线程函数 Process finished with exit code 0其实单线程的执行结果和单独执行某一个或者某一组函数结果是一样的,区别只在于用线程的方式执行函数,而线程是可以同时执行多个的,函数是不可以同时执行的。多线程执行上面介绍了单线程如何使用,多线程只需要通过循环创建多个线程,并循环启动线程执行就可以了实例import threading from datetime import datetime def thread_func(): # 线程函数 print('我是一个线程函数', datetime.now()) def many_thread(): threads = [] for _ in range(10): # 循环创建10个线程 t = threading.Thread(target=thread_func) threads.append(t) for t in threads: # 循环启动10个线程 t.start() if __name__ == '__main__': many_thread()执行结果C:\Python36\python.exe D:/MyThreading/manythread.py 我是一个线程函数 2019-06-23 16:54:58.205146 我是一个线程函数 2019-06-23 16:54:58.205146 我是一个线程函数 2019-06-23 16:54:58.206159 我是一个线程函数 2019-06-23 16:54:58.206159 我是一个线程函数 2019-06-23 16:54:58.206159 我是一个线程函数 2019-06-23 16:54:58.207139 我是一个线程函数 2019-06-23 16:54:58.207139 我是一个线程函数 2019-06-23 16:54:58.207139 我是一个线程函数 2019-06-23 16:54:58.208150 我是一个线程函数 2019-06-23 16:54:58.208150 Process finished with exit code 0通过循环创建10个线程,并且执行了10次线程函数,但需要注意的是python的并发并非绝对意义上的同时处理,因为启动线程是通过循环启动的,还是有先后顺序的,通过执行结果的时间可以看出还是有细微的差异,但可以忽略不记。当然如果线程过多就会扩大这种差异。我们启动500个线程看下程序执行时间实例import threading from datetime import datetime def thread_func(): # 线程函数 print('我是一个线程函数', datetime.now()) def many_thread(): threads = [] for _ in range(500): # 循环创建500个线程 t = threading.Thread(target=thread_func) threads.append(t) for t in threads: # 循环启动500个线程 t.start() if __name__ == '__main__': start = datetime.today().now() many_thread() duration = datetime.today().now() - start print(duration)执行结果0:00:00.111657 Process finished with exit code 0500个线程共执行了大约0.11秒那么针对这种问题我们该如何优化呢?我们可以创建25个线程,每个线程执行20次线程函数,这样在启动下一个线程的时候,上一个线程已经在循环执行了,这样就大大减少了并发的时间差异优化import threading from datetime import datetime def thread_func(): # 线程函数 print('我是一个线程函数', datetime.now()) def execute_func(): for _ in range(20): thread_func() def many_thread(): start = datetime.now() threads = [] for _ in range(25): # 循环创建500个线程 t = threading.Thread(target=execute_func) threads.append(t) for t in threads: # 循环启动500个线程 t.start() duration = datetime.now() - start print(duration) if __name__ == '__main__': many_thread()输出结果(仅看程序执行间隔)0:00:00.014959 Process finished with exit code 0后面的优化执行500次并发一共花了0.014秒。比未优化前的500个并发快了几倍,如果线程函数的执行时间比较长的话,那么这个差异会更加显著,所以大量的并发测试建议使用后者,后者比较接近同时“并发”守护线程多线程还有一个重要概念就是守护线程。那么在这之前我们需要知道主线程和子线程的区别,之前创建的线程其实都是main()线程的子线程,即先启动主线程main(),然后执行线程函数子线程。那么什么是守护线程?即当主线程执行完毕之后,所有的子线程也被关闭(无论子线程是否执行完成)。默认不设置的情况下是没有守护线程的,主线程执行完毕后,会等待子线程全部执行完毕,才会关闭结束程序。但是这样会有一个弊端,当子线程死循环了或者一直处于等待之中,则程序将不会被关闭,被被无限挂起,我们把上述的线程函数改成循环10次, 并睡眠2秒,这样效果会更明显import threading from datetime import datetime import time def thread_func(): # 线程函数 time.sleep(2) i = 0 while(i < 11): print(datetime.now()) i += 1 def many_thread(): threads = [] for _ in range(10): # 循环创建500个线程 t = threading.Thread(target=thread_func) threads.append(t) for t in threads: # 循环启动500个线程 t.start() if __name__ == '__main__': many_thread() print("thread end")执行结果C:\Python36\python.exe D:/MyThreading/manythread.py thread end 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.468612 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.469559 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.470556 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.471554 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.472557 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.473548 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.474545 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.475552 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.476548 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 2019-06-23 19:08:00.477546 Process finished with exit code 0根据上述结果可以看到主线程打印了“thread end”之后(主线程结束),子线程还在继续执行,并未随着主线程的结束而结束下面我们通过 setDaemon方法给子线程添加守护线程,我们把循环改为死循环,再来看看输出结果(注意守护线程要加在start之前)import threading from datetime import datetime def thread_func(): # 线程函数 i = 0 while(1): print(datetime.now()) i += 1 def many_thread(): threads = [] for _ in range(10): # 循环创建500个线程 t = threading.Thread(target=thread_func) threads.append(t) t.setDaemon(True) # 给每个子线程添加守护线程 for t in threads: # 循环启动500个线程 t.start() if __name__ == '__main__': many_thread() print("thread end")输出结果2019-06-23 19:12:35.564539 2019-06-23 19:12:35.564539 2019-06-23 19:12:35.564539 2019-06-23 19:12:35.564539 2019-06-23 19:12:35.564539 2019-06-23 19:12:35.564539 2019-06-23 19:12:35.565529 2019-06-23 19:12:35.565529 2019-06-23 19:12:35.565529 thread end Process finished with exit code 0通过结果我们可以发现,主线程关闭之后子线程也会随着关闭,并没有无限的循环下去,这就像程序执行到一半强制关闭执行一样,看似暴力却很有用,如果子线程发送一个请求未收到请求结果,那不可能永远等下去,这时候就需要强制关闭。所以守护线程解决了主线程和子线程关闭的问题。阻塞线程上面说了守护线程的作用,那么有没有别的方法来解决上述问题呢? 其实是有的,那就是阻塞线程,这种方式更加合理,使用join()方法阻塞线程,让主线程等待子线程执行完成之后再往下执行,再关闭所有子线程,而不是只要主线程结束,不管子线程是否执行完成都终止子线程执行。下面我们给子线程添加上join()(主要join要加到start之后)import threading from datetime import datetime import time def thread_func(): # 线程函数 time.sleep(1) i = 0 while(i < 11): print(datetime.now()) i += 1 def many_thread(): threads = [] for _ in range(10): # 循环创建500个线程 t = threading.Thread(target=thread_func) threads.append(t) t.setDaemon(True) # 给每个子线程添加守护线程 for t in threads: # 循环启动500个线程 t.start() for t in threads: t.join() # 阻塞线程 if __name__ == '__main__': many_thread() print("thread end")执行结果程序会一直执行,但是不会打印“thread end”语句,因为子线程并未结束,那么主线程就会一直等待。疑问:有人会觉得这和什么都不设置是一样的,其实会有一点区别的,从守护线程和线程阻塞的定义就可以看出来,如果什么都没设置,那么主线程会先执行完毕打印后面的“thread end”,而等待子线程执行完毕。两个都设置了,那么主线程会等待子线程执行结束再继续执行。而对于死循环或者一直等待的情况,我们可以给join设置超时等待,我们设置join的参数为2,那么子线程会告诉主线程让其等待2秒,如果2秒内子线程执行结束主线程就继续往下执行,如果2秒内子线程未结束,主线程也会继续往下执行,执行完成后关闭子线程输出结果import threading from datetime import datetime import time def thread_func(): # 线程函数 time.sleep(1) i = 0 while(1): print(datetime.now()) i += 1 def many_thread(): threads = [] for _ in range(10): # 循环创建500个线程 t = threading.Thread(target=thread_func) threads.append(t) t.setDaemon(True) # 给每个子线程添加守护线程 for t in threads: # 循环启动500个线程 t.start() for t in threads: t.join(2) # 设置子线程超时2秒 if __name__ == '__main__': many_thread() print("thread end")你运行程序后会发现,运行了大概2秒的时候,程序会数据“thread end” 然后结束程序执行, 这就是阻塞线程的意义,控制子线程和主线程的执行顺序总结最好呢,再次说一下守护线程和阻塞线程的定义1.守护线程:子线程会随着主线程的结束而结束,无论子线程是否执行完毕2.阻塞线程:主线程会等待子线程的执行结束,才继续执行以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
2020年12月28日
124 阅读
0 评论
0 点赞
2020-12-28
Python压力测试脚本CPU
#!/usr/bin/env python3 import time import urllib.request import threading from time import sleep # 性能测试页面 PERF_TEST_URL = "目标域名" # 配置:模拟运行状态 THREAD_NUM = 1200 # 并发线程总数 ONE_WORKER_NUM = 100 # 每个线程的循环次数 LOOP_SLEEP = 0.1 # 每次请求时间间隔(秒) # 出错数 ERROR_NUM = 0 #具体的处理函数,负责处理单个任务 def doWork(index): t = threading.currentThread() try: html = urllib.request.urlopen(PERF_TEST_URL).read() except Exception as e: print(e) global ERROR_NUM ERROR_NUM += 1 def working(): t = threading.currentThread() # print( "["+t.name+"] Sub Thread Begin" ) i = 0 while i < ONE_WORKER_NUM: i += 1 doWork(i) sleep(LOOP_SLEEP) # print( "["+t.name+"] Sub Thread End" ) def main(): t1 = time.time() Threads = [] # 创建线程 for i in range(THREAD_NUM): t = threading.Thread(target=working, name="T"+str(i)) t.setDaemon(True) Threads.append(t) for t in Threads: t.start() for t in Threads: t.join() print( "main thread end" ) t2 = time.time() print( "========================================" ) print( "URL:", PERF_TEST_URL ) print( "任务数量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM*ONE_WORKER_NUM ) print( "总耗时(秒):", t2-t1 ) print( "每次请求耗时(秒):", (t2-t1) / (THREAD_NUM*ONE_WORKER_NUM) ) print( "每秒承载请求数:", 1 / ((t2-t1) / (THREAD_NUM*ONE_WORKER_NUM)) ) print( "错误数量:", ERROR_NUM ) if __name__ == "__main__": main()
2020年12月28日
105 阅读
0 评论
0 点赞
2020-12-28
Python接口压力测试
1、单进程多线程模式# #!/usr/bin/env python # # -*- coding:utf-8 -*- import time import logging import requests import threading from concurrent import futures # download_url = 'http://192.168.188.110:8081//workspace/record_download/polls/82003533467_18b305da-e313-11e8-aa39-00163e0a6bde.mp3' # download_url = 'http://192.168.188.110:8081//workspace/record_download/polls/test.log' download_url = 'http://192.168.188.110:8081//workspace/record_download/polls/9921_057128214999_18210532807_20181113110420_00163e104dbfbb8b11e8e6f0d0990876(3).wav' workers = 1000 mutex = threading.Lock() session = requests.Session() contain = {'average_cost':0,'min_cost':0,'max_cost':0,'hit_count':0} def handle(cost): with mutex: min_cost = contain['min_cost'] max_cost = contain['max_cost'] hit_count = contain['hit_count'] average_cost = contain['average_cost'] if min_cost == 0: contain['min_cost'] = cost if min_cost > cost: contain['min_cost'] = cost if max_cost < cost: contain['max_cost'] = cost average_cost = (average_cost*hit_count + cost) / (hit_count + 1) hit_count +=1 contain['average_cost'] = average_cost contain['hit_count'] = hit_count logging.info(contain) def download_one(): while True: try: stime = time.time() request = requests.Request(method='GET', url=download_url,) prep = session.prepare_request(request) response = session.send(prep, timeout=100) etime = time.time() # print(response.content) logging.info('thread[%s] status[%s] cost[%s]',threading.current_thread().ident, response.status_code,etime-stime) handle(float(etime-stime)) except Exception as e: logging.error(e) print(e) def main(): with futures.ThreadPoolExecutor(workers) as executor: for i in range(workers): executor.submit(download_one) if __name__ == '__main__': logging.basicConfig(filename="client.log", level=logging.INFO, format="%(asctime)s [%(filename)s:%(lineno)d] %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]") main()2、多进程多线程模式# #!/usr/bin/env python # # -*- coding:utf-8 -*- import os import time import logging import requests import threading from multiprocessing import Lock,Manager from concurrent import futures download_url = 'http://192.168.188.105:8888' workers = 250 cpu_count = 4 session = requests.Session() def handle(cost,mutex,contain): with mutex: min_cost = contain['min_cost'] max_cost = contain['max_cost'] hit_count = contain['hit_count'] average_cost = contain['average_cost'] if min_cost == 0: contain['min_cost'] = cost if min_cost > cost: contain['min_cost'] = cost if max_cost < cost: contain['max_cost'] = cost average_cost = (average_cost*hit_count + cost) / (hit_count + 1) hit_count +=1 contain['average_cost'] = average_cost contain['hit_count'] = hit_count logging.info(contain) def download_one(mutex,contain): while True: try: stime = time.time() request = requests.Request(method='GET', url=download_url,) prep = session.prepare_request(request) response = session.send(prep, timeout=50) etime = time.time() print(response.status_code) logging.info('process[%s] thread[%s] status[%s] cost[%s]',os.getpid(),threading.current_thread().ident, response.status_code,etime-stime) handle(float(etime-stime),mutex,contain) # time.sleep(1) except Exception as e: logging.error(e) print(e) def new_thread_pool(mutex,contain): with futures.ThreadPoolExecutor(workers) as executor: for i in range(workers): executor.submit(download_one,mutex,contain) def subprocess(): manager = Manager() mutex = manager.Lock() contain = manager.dict({'average_cost': 0, 'min_cost': 0, 'max_cost': 0, 'hit_count': 0}) with futures.ProcessPoolExecutor(cpu_count) as executor: for i in range(cpu_count): executor.submit(new_thread_pool,mutex,contain) if __name__ == '__main__': logging.basicConfig(filename="client.log", level=logging.INFO, format="%(asctime)s [%(filename)s:%(lineno)d] %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]") subprocess()
2020年12月28日
197 阅读
0 评论
0 点赞
2020-12-26
python打包成exe可执行文件教程
本文,介绍一下把python代码打包成windows的可执行文件的方法。步骤1安装pywin32,可以参考《怎么给python安装pywin32模块?》一定要注意对应的python版本,否则不能安装。步骤2用命令行调用pip安装pyinstaller。步骤3准备一个py文件。我这里准备的是一个爬取电子书的python文件——00.py。步骤4准备一个图片,作为exe的图标:b.ico注意图片格式是ico的,大小为32*32,不要太大。没有的话,可以在网上免费转格式。把00.py和b.ico放到一个目录里面——C:\a步骤5把cmd的当前目录切换到C:\a。步骤6然后执行命令行:pyinstaller -F -i b.ico 00.py注意:文件名后面不要有后缀,直接00和b步骤7运行之后,cmd变成了这样。步骤8在C:\a目录里面,多出了几个文件夹。可执行文件00.exe就在dist文件夹里面。步骤9双击可执行文件,会弹出一个命令提示符端口,提示你输入书号。按照格式输入书号,点击回车键,就可以在dist文件夹里面,看到一章章的电子书被下载下来了。exe的图标,一定要是ico格式。
2020年12月26日
89 阅读
0 评论
0 点赞
2020-11-22
免费ssl证书申请与部署教程(5分钟搞定)
什么是ssl证书?SSL证书,也称为服务器证书,是遵守SSL协议的一种数字证书,由全球信任的证书颁发机构如(isssl.cn)验证服务器身份后颁发。将SSL证书安装在网站服务器上,可实现网站身份验证和数据加密传输双重功能。第一步:进入ssl申请网站进入ssl证书申请网站freessl.cn第二步:注册账号点击右上角注册,注册账号账号注册完成后点击登录第三步:创建免费ssl证书登录完成后我们再次回到首页,输入你需要部署ssl证书的域名,品牌你可以自由选择,并点击创建创建后我们会跳转到以下界面选择浏览器生成,并点击创建确认创建第四步:保存密钥确认创建后会出现一个下载,我们将它下载到桌面第五步:解析域名我的域名是阿里云买的,所以此处以阿里云为例,来到阿里云域名解析界面选择你刚刚在ssl证书网站填写的域名,点击解析设置点击添加记录填写记录, 记录类型选择TXT,主机记录填写ssl证书网站的TXT记录,记录值填写ssl证书网站的记录值第六步:测试解析结果域名解析后回到ssl证书网站,点击 配置完成检测一下如果检测结果3个都为匹配说明你已经解析成功了第七步:验证并接收证书信息匹配成功后我们点击验证,会收到证书信息,直接下载到桌面第八步:宝塔部署证书信息下载后来到宝塔的网站界面,点击你在ssl证书网站填写的网站,点击设置点击ssl,选择其他证书第九步:填写证书信息key回到桌面解压我们在ssl证书网站第二次下载的压缩包用记事本打开后缀名为 key的文件 并复制里面的所有内容复制完成后来到宝塔,把复制的key内容粘贴到左边的密钥框内第十步:填写证书信息pem打开后缀名为 pem的文件 并复制里面的所有内容复制完成后来到宝塔,把复制的pem内容粘贴到右边边的证书框内完成后点击保存第十一步:完成部署ssl证书保存好后,点击右上角的证书夹,就会出现我们保存的ssl证书了,我们点击部署部署成功后记得点击右上角的强制https才会生效到此我们已经成功的部署了ssl证书了,刷新网站我们就可以看到网站前面的安全标志了
2020年11月22日
908 阅读
0 评论
0 点赞
2020-11-22
域名在QQ内打开提示'非官方页面'的解决方法
域名变白域名变白是指域名在QQ内打开被提示'非官方页面'正确申述进入 腾讯网址安全中心 ,很多人喜欢去管家网址安全中心申诉,那是没有效果的!或者选择优先申诉通道,微信扫码左侧微信进行申诉!输入被拦截域名,然后选择我是站长,在服务器按照提示上传TXT文件,进行验证!至此申述完成
2020年11月22日
988 阅读
1 评论
0 点赞
1
...
3
4
5
6