进程锁与进程池
如果多个进程抢占去对某一个共同的对象的操作的时候,为了防止操作产生冲突,这个时候就可以通过锁的操作来避免。 案例展示以下展示没有使用锁的案例: 123456789101112131415import timefrom multiprocessing import Process,Value,Arraydef test_func(n,): n.value = n.value + 1if __name__ == "__main__": num = Value('i',0) for i in range(20): p = Process(target=test_func,args=(num,)) p.start() time.sleep(1) ...
RGB与CMYK
在最近的工作中经常遇到图像处理相关知识,因此做一个记录: RGB模式RGB模式是以色光三原色为基础建立的色彩模式,RGB图像只使用三种颜色,当不等量的三种色光进行叠加混合时,即会在屏幕上重现自然界各种各样的颜色。红、绿、蓝每一种颜色各有256级亮度,用数字表示为从0、1、2…..直到255,256级的RGB色彩总共能组合出约1678万种色彩。RGB模式是电脑、手机、投影仪、电视等屏幕显示的最佳颜色模式。 CMYK模式CMYK是4种印刷油墨名称的首字母:青色Cyan、洋红色Magenta、黄色Yellow和黑色Black。之所以没有缩写成B(Black),是为了和RGB的B区分开,此外表示K印版是起关键作用的印版,在图像中能起到一种”骨架”的作用。CMYK主要应用于印刷,它的颜色由四个通道组成。印刷时,C、M、Y、K各出一张菲林。 两者都是作为计算机颜色的表示工具,前者更适合电脑,后者更适合打印,前者的色域更广,后者略微少,但是两者都有自己独特的色域。 补充 灰度RGB...
三层架构/MVC/MTV
在以前的时候,我总是把这三者混为一谈,总以为是不同语言或者不同环境条件下的称呼或者变种,后来我逐渐明白这是不一样的。 三层架构web开发其实并不一定需要遵循某一个框架进行开发,其实上能够实现web服务就行,但是在长期的摸索跟探究过程中,前人根据自己的经验进行总结,得出依据某个框架或者某个模式进行开发是一个较为高效的过程。 界面层(表示层):用户看的界面。用户可以通过界面上的组件和服务器进行交互 业务处理逻辑:处理业务逻辑的 数据访问层:操作数据存储文件 本质上这是一个线性结构,从上往下: 表示层请求数据,发送给业务逻辑层 业务逻辑层根据情况去数据访问层进行数据查询 从下往上: 数据访问层提交原始数据给业务逻辑层 业务逻辑层将处理后的数据提交给表示层 整个过程是一个线性结构从上至下的请求数据,数据从下往上进行返回 三层架构的优缺点优点:1、高内聚,低耦合2、方便维护,易于扩展3、开发人员可以只关注某一层,有利于分工协作,加快开发速度 ...
python进程基本使用
常用方法p.start() 与 p.join() p.start():当前进程准备就绪,等待被CPU调度,简单理解也就是启动进程 p.join():等待当前进程的任务执行完毕后再向下继续执行 代码如下: 123456789101112131415import multiprocessingdef task(ele): print(ele) print("执行中")if __name__ == "__main__": multiprocessing.set_start_method("spawn") ele = [] res = multiprocessing.Process(target=task,args=(ele,)) res.start() res.join() print("继续执行") res.join()的出现会使得程序在执行完子进程之后再继续执行主进程,当然,上述案例已经让程序按顺序执行了,进程意义不大了。 p.daemon =...
python进程基础
在学习python进程相关知识的时候,查询各种网站或者博客,对于进程的解释都没有那么全面,有时候仅给出部分案例,导致代码有时候爆出一些莫名其妙的错误,因此写下这篇基础文章。 python 的三种进程模式在python当中进程被分为三种模式,不同的模式有不同的约束条件,也有不同的运行场景,需要依据情况而定: fork spawn forkserver 拷贝几乎程序拥有的所有资源 需要从启动函数处传入程序运行的必要资源 需要从启动函数处传入程序运行的必要资源 支持文件对象/线程锁等传参 不支持文件对象/线程锁等传参 不支持文件对象/线程锁等传参 unix unix/win 部分unix 快 慢 — 任意位置创建 main函数开始 main函数开始 注:main函数指: 12>if __name__ == "__main__": pass 并非指代函数名为main函数的函数。 案例fork123456789101112import multiprocessingdef task(): print(ele) #...
git新增命令
在以前的git切换分支还有回滚版本的时候使用命令checkout,但是这略微繁琐了一点,也不容区分与记忆,因此后来git就更新了两个命令: 123456789$ git switch aaa # 切换到 aaa分支$ git switch -c aaa # 创建aaa,然后切换到 aaa分支$ git restore [--worktree] aaa # 从staged中恢复aaa到worktree$ git restore --staged aaa # 从repo中恢复aaa到staged$ git restore --staged --worktree aaa # 从repo中恢复aaa到staged和worktree$ git restore --source dev aaa # 从指定commit中恢复aaa到worktree 这个更新是很早以前的事情了,但是碍于现在有时候开发git版本被统一,没有跟上导致查到命令没办法使用,所以记录一下而已,所以这篇文章的配乐也不是那么促进学习。
git分支怎样改名字
假设分支名称为oldName,想要修改为 newName 1.本地分支重命名(还没有推送到远程) 1git branch -m oldName newName 2.远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同) a. 重命名远程分支对应的本地分支 1git branch -m oldName newName b. 删除远程分支 1git push --delete origin oldName c. 上传新命名的本地分支 1git push origin newName d.把修改后的本地分支与远程分支关联 1git branch --set-upstream-to origin/newName
supervisor
supervisorsupervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启,但它不能管理原本就是daemon的进程。并且supervisor本身自己也是一个python库,因此可以使用pip进行直接安装: 1pip install supervisor 使用supervisor管理进程依赖的相应的配置文件,配置文件可以通过命令生成: 1echo_supervisord_conf > /app/install_files/supervisor.conf 配置文件当中有许多可以配置的选项,这里不一一列举,只给出部分配置: 1234567[program:project_name]directory = 工作目录command = 脚本的启动命令autostart = trueautorestart = trueuser = loanwardstdout_logfile =...
中文ocr
cnocrcnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,所以安装后即可直接使用。目前使用的识别模型是crnn,识别准确度约为 98.7%。 安装:pip install cnocr 代码引用 1234from cnocr import CnOcr ocr = CnOcr() res = ocr.ocr_for_single_line('test.png') print("Predicted Chars:", res) 首次使用cnocr时,系统会自动从Dropbox下载zip格式的模型压缩文件,并存于 /.cnocr目录。 下载后的zip文件代码会自动对其解压,然后把解压后的模型相关文件放于/.cnocr/models目录。 如果系统不能自动从Dropbox成功下载zip文件,则需要手动下载此zip文件并把它放于 ~/.cnocr目录。 另一个下载地址是百度云盘(提取码为pg26)。...
(fastapi五)后台执行程序
在web开发过程当中,总会需要一种情况,就是用户发送完请求之后只需要确认自己已经发送了指令,并不着急等待最终结果的返回,仅仅需要一个响应状态,如果这个时候程序要等待执行完毕后返回结果,肯定是不合理的,因此fastapi提供一种自己的后台程序处理方法。 BackgroundTasks代码案例: 123456789101112131415from fastapi import BackgroundTasks, FastAPIapp = FastAPI()def write_notification(email: str, message=""): with open("log.txt", mode="w") as email_file: content = f"notification for {email}: {message}" ...









后台执行程序/封面.jpg)




