Friday, June 18, 2021

V2EX - 技术

V2EX - 技术

V2EX - 技术


example of springboot, spring-data-jpa,h2 database, caffeine cache

Posted: 18 Jun 2021 05:42 AM PDT

https://github.com/mightofcode/springdata-h2-caffeine-example

example of springboot, spring-data-jpa,h2 database, caffeine cache

求大佬们优化一下代码,屎山代码给孩子头皮想破了

Posted: 18 Jun 2021 05:13 AM PDT

秉着不写垃圾代码的原则,求大佬优化一下,最优值奉上红包
需求是这样的:

万恶后端传过来的数据:
"data":[{"province":"上海市","city":"上海市市辖区","adcode":"310118","district":"青浦区"},
{"province":"江苏","city":"苏州市","adcode":"320506","district":"吴中区"},
{"province":"山西省","city":"阳泉市","adcode":"140302","district":"城区"},
{"province":"上海市","city":"上海市市辖区","adcode":"310101","district":"黄浦区"},
{"province":"河北省","city":"石家庄市","adcode":"130123","district":"正定县"}]

需要整合成这样 elementUi 中级联选择器中的数据:
(只要有相同的就要去重并在之前的 children 下加入重复的 children )
addressOptions: [
{
value: "zhinan",
label: "指南",
children: [
{
value: "shejiyuanze",
label: "设计原则",
children: [
{
value: "yizhi",
label: "一致",
},
{
value: "fankui",
label: "反馈",
},
{
value: "xiaolv",
label: "效率",
},
{
value: "kekong",
label: "可控",
},
],
},
{
value: "daohang",
label: "导航",
children: [
{
value: "cexiangdaohang",
label: "侧向导航",
},
{
value: "dingbudaohang",
label: "顶部导航",
},
],
},
],
},
],

我的垃圾代码:

dealWithAddressList(arr, name) {
var city = {};
return arr.reduce(function (item, ele) {
console.log(ele[name]);
if (city[ele[name]]) {
item.forEach((eles) => {
if (eles.label == ele[name]) {
eles.children.forEach((eless) => {
if (eless.value == ele.city) {
eless.children.push({
value: ele.adcode,
label: ele.district,
});
} else {
eles.children.push({
value: ele.city,
label: ele.city,
children: [
{
value: ele.adcode,
label: ele.district,
},
],
});
}
});
}
});
console.log(city[ele[name]]);
} else {
city[ele[name]] =
true &&
item.push({
value: ele.province,
label: ele.province,
children: [
{
value: ele.city,
label: ele.city,
children: [
{
value: ele.adcode,
label: ele.district,
},
],
},
],
});
}
console.log(item);
return item;
}, []);
},

求大佬优化一下,可以的话有红包奉上

弄了一个歌单,眼睛都快瞎了,快来收藏,懂得都懂

Posted: 18 Jun 2021 05:09 AM PDT

歌单地址: https://music.163.com/#/my/m/music/playlist?id=6814316218

有空还会继续更新。。。

pic

在 Pycharm 中将断点定在定义函数 def 那一行(后面有调用函数), debug 会无视断点,直接跑完整个程序,请问该如何解决?

Posted: 18 Jun 2021 04:56 AM PDT

补充说明:
1.这个情况只发生在断点在定义函数那一行,断点在其他地方都可以正常 debug 。
2.没有开启"Mute Breakpoint"。

vscode 写 LaTeX 可否做到代码与预览滚动同步?

Posted: 18 Jun 2021 04:39 AM PDT

网上能找到的曲线方法是调用外部预览程序 skim,着实麻烦。有没有直接在 vscode 里边预览同步滚动,或者正反向定位的方法?

程序员年龄真的很重要吗

Posted: 18 Jun 2021 04:39 AM PDT

如果是 30 岁了还是初级开发会很吃力吗

关于 docker-compose 搭建 golang 本地开发环境的问题

Posted: 18 Jun 2021 04:28 AM PDT

目前公司的项目结构大致如下:

project ├── Makefile ├── README.md ├── apps │   ├── app1 │   ├── app2 │   ├── app3 │   ├── app4 │   ├── app5 │   └── app6 ├── conf ├── config ├── mods ├── db ├── docker-compose.dev.yml ├── docker-compose.yml ├── go.mod ├── go.sum ├── helper ├── message └── utils 

多个 app 共用一个 go.mod 管理,也共享外面的公共类库。

每个 app 目录下只包含一个简单 main 函数启动服务,大部分的业务逻辑都写在 mods 目录下的对应的模块 package 下,每个模块 package 可能会被多个 app 导入。

整个项目需要所有的 app 服务都启动,目前我是用 docker-compose 把每个 app 都单独打入一个镜像编译并运行。 每个镜像我都把整个项目 COPY 进去编译,只忽略了 apps 目录。

现在问题是,当我修改 mods 或其他共享 package 的代码时,再 docker-compose build 会导致所有镜像都从 COPY 开始缓存失效,导致所有 app 都重新编译,不管我修改的地方有没有被这个 app 引入。

一个很小的改动都需要十几分钟才能看效果,真是太难受了。。。

不知道大家都是怎么搭建本地开发环境的?

[纯讨论] 为什么有了手机网页版(小程序),还需要开发 app, ios 和安卓开发还有未来吗?

Posted: 18 Jun 2021 04:18 AM PDT

我是纯后端,以上问题纯属胡思乱想,希望大家合理讨论

给你们推荐个群晖的迅雷套件 凑合用

Posted: 18 Jun 2021 04:17 AM PDT

群晖的迅雷套件内测版 唯一的要求就是需要内测资格 有需求的可以自己申请内测资格 先说说感受吧 下载速度还行 (无下载任务时 不上传)简单观察了下 好像真不上传 这点比玩物下载好多了 不能修改下载目录(但是可以自己在控制面板改位置)迅雷总算出个好东西了

RpmLSs.md.jpg

PS:好吧 看下面的小字 真的是凑合用 无语。 RpuRqP.png

下面是申请内测资格通道 名额有限 有爱自取 https://docs.qq.com/form/page/DQUJXZUdtRlNGWkxr

上班一年 git commits 统计

Posted: 18 Jun 2021 03:21 AM PDT

github pages 原文地址

统计日期截至 2021-06-17

刚入行的低级搬砖工, 虽然同样不认同代码量代表工作质量, 但是提交的次数还是可以一定程度上反应一些有趣的事实.

总体:

  • 距离第一次提交已经 336 天

  • 一共提交代码 915 次

  • 最多的一天: 2021-06-04, 提交了 36 次

  • 有 171 天都提交了代码

按年份统计结果:

两个年份都是差不多 6 个月, 21 年的提交更多些

按月份统计结果:

2021-06 有趋势成为最多的一个月

  • 最近跑了几个人, 人么又招不到

按每天的统计结果:

每个周一都是提交代码最多的时候, 周二就摸鱼一些, 后面保持基本平稳

  • 这个趋势也是比较有趣的, 虽然并没有明显感知, 但是就是这样被如实记录了

  • 我也拿同事的提交记录生成过, 结果是有的人是周三是一个明显的 commit 高峰, 有的人就整个周都比较平均

  • 周末也来加过几次班

腾讯云 cos 如何防止恶意刷流量呀

Posted: 18 Jun 2021 03:18 AM PDT

参考了腾讯 COS 官方的资料: https://cloud.tencent.com/document/product/436/56651

但是似乎自定义 Header 可以绕过此限制。

大家还有什么好办法吗,怕一觉醒来房子没了(本来也没有房子~~)

请教一个问题,做中间件的意义是什么?

Posted: 18 Jun 2021 02:48 AM PDT

大型项目可以做地址转发,不暴露后端接口地址,可以提高并发量,可以负载均衡。 但在小型的项目中,除了能帮前端整理更合适的接口数据,还有没有其他意义。

正在写中间件,突然感觉自己做的东西没什么意义。反而增加了自己的工作量, 仅仅只是为了让自己的前端代码更舒服一些。。。

至于我一开始写中间件的目的,则是过滤条件,我们现在的业务有一个需求,获取所有订单的数量,但是后台把所有订单列表饭回来了,我只想取数组的 length,所以我觉得很浪费资源,但是想想我用 node 去处理这个数组的时候,实际我还是接收了三个请求(因为不同类型的订单所以要走三个接口),所以速度应该不会更快,那我写中间件的意义是什么呢。

观《向老板提需求被狠批》有感

Posted: 18 Jun 2021 02:44 AM PDT

真实的职场经历往往能引起大家的共鸣,被 V 友 @totoro52 的一句 "永远不要跟老板提系统的改动和重构,他们永远都不会答应的,他们只会觉得 这只会浪费时间和人力" 触动。

本人也是刚入职一家公司不久,7 年后端了,技术马马虎虎,胜在有一些中厂经验。之前搞过创业,也带过团队,后来被人坑了,又回归到正常的工作。 带过团队经历过,确认自己是不适合搞管理的,不太擅长沟通(喜欢有挑战的事情自己做,不放心,把活分配出去总觉得不好意思,没法对团队施压,甩黑脸等等,简单来讲就是心软或者软弱懦弱)只想做好自己的事情。

新的团队业务倒也没有很复杂,但代码不怎么规范有点乱,初来乍到,花了很多心思在优化重构上,结果被直接 leader 各种拐弯抹角,说了很多次,说你觉得是优化重构,其实不过是审美问题,每个人都有自己的想法和喜好,有些人就喜欢一堆 if else 一个方法几百行也没问题。 就总认为我的工作,仅仅是让代码变的好看了,于团队全然没有帮助,甚至会让有些人不习惯影响开发效率。可能他都觉得我是在做无用功吧,连续几周对我的评价都是,不要钻技术细节,要从全局去看。。。。。。哎。

昨天引发了一场有关 MVP(最小可行性产品)大战,到底哪种是对的?

Posted: 18 Jun 2021 02:32 AM PDT

关于敏捷 MVP 的示例图,到底哪个是对的,有没有大佬指点下?搜集国内外的资料上面的说法也都不统一。不会发图,就发个位置吧: https://www.zentao.net/redirect-index-19134.html

目前争论的有两个角度,一个是从功能上看,一个是从原型杜绝浪费角度看。在做相关内容,求高人指点。

Google 全面放开了 Workspace 和 Google Chat, 但是...

Posted: 18 Jun 2021 02:13 AM PDT

哪位大哥给缕缕时间线啊, G 家发布了多少聊天类的应用了, 立了拆, 拆了改, 改了砍, 砍了再立新的...

我当年刚接触互联网的时候, 大家都在用的是 Gmail 发邮件, Gtalk 发消息, Gvoice 通话, 然后大家很期待革命性的 Gwave 协同办公

后来莫名其妙来了个 Hangouts, 然后又拆成了 Hangouts meet 和 Hangouts Chat, 然后又推了 Allo 和 Duo, 这其中又有多少我遗漏的不清楚
然后现在推出了 Workspace, 我理解的是包含了 Gmail, Chat, Meet, Spaces 这四个核心套件. 这样对比下来, 和十五年前也没啥差别啊...无非就是网速快了些?

老哥们来谈谈你们对 G 家发展路线的理解或者不理解🐶

亚马逊香港挂了还是我账号挂了

Posted: 18 Jun 2021 02:11 AM PDT

vps 起不来了,启动后实例状态显示待处理,过一会又变成已停止

最近学 rtmp 协议,使用 ffmpeg 推流然后抓包,对抓到的数据有些疑问

Posted: 18 Jun 2021 01:48 AM PDT

具体:connect 指令中有个 tcurl 字段,是 rtmp 地址,我抓到的数据在地址的端口号那里多了一个点,例如地址是 rtmp://11.11.11.11:1935,实际抓包得到的地址是 rtmp://11.11.11.11:1.935 ,中间多了个点,这是为啥。。

关于一个扣费设计问题,请教一下 v 站的各位大佬

Posted: 18 Jun 2021 01:36 AM PDT

目前我们有一个充电桩的项目, 用户存在账户余额体系, 充电是按照每分钟按照电量或者功率计费, 一个用户同时存在多个订单,目前的设计是在用户有订单的情况下,就会在 redis 中创建一个当前账户的缓存,如果存在多个订单,扣费都扣减这个共享的缓存账户, 另外正在进行中的订单也会存在一份 redis 缓存, 用来累计金额,电量等信息,在订单结束后同步相关信息到数据库中, 因为每天同时进行中的订单有好几万,历史订单千万级别, 所以没有使用每次更新数据库的设计, 所有数据都保存在缓存中有时候会出现数据不一致的情况,不知道各位大佬对这种场景有没有好的建议或者方案

vscode 快捷键请教。

Posted: 18 Jun 2021 12:37 AM PDT

今天看黑马程序员视频,视频中的老师操作了一下,感觉很神奇,自己试了许久,也问了一些人,但都得不到正确答案,望各位朋友能解我所惑,不胜感激!

选中<h> </h>中的所有内容 但是不选中 h 标签

<h>   <view>1</view>   <view>2</view>   <view>3</view>   <view>4</view>   <view>5</view>   <view>6</view>   <view>7</view>   <view>8</view>  </h> 

求助,国内外有没有性价比高延迟延迟低 powered off 关闭不收费得云厂商

Posted: 18 Jun 2021 12:32 AM PDT

用途:

要开发一些 devops 得工具和基础服务组件会用到多台服务器资源调试

但是一天又没有几个小时做这个,如果买包年得太贵不划算,有没有这样得服务呢

望各位大佬出个建议,谢谢了

JavaScript 变量创建 所对应的内存值连续吗

Posted: 18 Jun 2021 12:19 AM PDT

比如我
情况 a
let a = 1
let b = 2
这样是连续的嘛
情况 b
let a = 1
let b = {name:'mafeifei'}
情况 c
let a= 1
setTimeout(()=>{var b =2 },0)

正确填写与获取下载文件名

Posted: 17 Jun 2021 11:17 PM PDT

我用 requests 下载文件,文件名在 response header 的 Content-Disposition 中, 在浏览器中虽然 devtools 解析乱码,但下载弹框的文件名正确,而在程序中获取到的内容也是乱码,类似于

attachment; filename=影宅 シャドーハウス 01;filename*=utf-8''影宅 シャドーハウス 01 

经过尝试,可能是进行了如下错误解码

    raw = '影宅 シャドーハウス 01'     b = bytes(raw, 'utf8')     dec = b.decode(encoding='iso-8859-1', errors='replace')     print(dec) 

output:

影宅 シャドーハウス 01 

逆向解码:

print(bytes(dec, 'iso-8859-1').decode('utf8')) 

按规范来说,接收方不保证能解析 utf8 header,所以各位开发同学请不要再在 header 中填入 utf8 内容了!

使用 thinkphp6.0 时遇到一个报错,请问怎么解决?

Posted: 17 Jun 2021 10:54 PM PDT

是一个验证登录的代码,验证代码为

<?php declare (strict_types = 1);  namespace app\admin\controller;  use think\facade\View; use think\Request; use app\admin\validate\Login as L; use think\exception\ValidateException;  class Login{     //     public function index(Request $request){         if($request->isPost()){             $data = $request->post();             $remember = $data['remember'] ?? 0;             try{             $result = validate(L::class)->check($data);//halt($result);             }catch(ValidateException $e){                 halt($e);             }                      }         return View::fetch();     } } 

验证器的代码为:

<?php declare (strict_types = 1);  namespace app\admin\validate;  use think\Validate;  class Login extends Validate {     /**      * 定义验证规则      * 格式:'字段名' =>  ['规则 1','规则 2'...]      *      * @var array      */     protected $rule = [         'username' => 'require|alphaNum|max:20',         'password' => 'require|alphaNum|length:6,16',     ];      /**      * 定义错误信息      * 格式:'字段名.规则名' =>  '错误信息'      *      * @var array      */     protected $message = [         'username.require' => '账号不能为空',         'password.require' => '密码不能为空',         'username.alphaNum' => '账号只能包含字母和数字',         'username.max' => '账号字符最大长度为 20',         'password.alphaNum' => '密码只能包含字母和数字',         'password.length' => '密码的长度为 6 ~ 16',     ]; }  

执行后报这个错误,请问是哪里出了问题?

#0 [0]Error in Validate.php line 1600 Call to a member function has() on null      * @param string $msg   错误信息      * @param mixed  $rule  验证规则数据      * @param string $title 字段描述名      * @return string|array      */     protected function parseErrorMsg(string $msg, $rule, string $title)     {         if (0 === strpos($msg, '{%')) {             $msg = $this->lang->get(substr($msg, 2, -1));         } elseif ($this->lang->has($msg)) {             $msg = $this->lang->get($msg);         }          if (is_array($msg)) {             return $this->errorMsgIsArray($msg, $rule, $title);         }          // rule 若是数组则转为字符串         if (is_array($rule)) {         ```

Jetpack 组件改进: UnPeek-LiveData V6 发行公测

Posted: 17 Jun 2021 10:37 PM PDT

刚刚在 Maven-Central 提交了 UnPeek-LiveData V6 版设计,感谢贡献者对该设计的分享。

这一版的 UnPeek-LiveData 十分接近我理想中的 LiveData 设计,也即它分别提供 "粘性的" 和 "非粘性的" 设计,来分别满足 "可变的、可倒灌的 state",和 "只读的、一次性的 event" 的场景需要。

该版本在 V5 版的基础上,通过引入代理类的设计,来规避反射方式访问基类数据结构的写法,使代码复杂度较上一版有所简化,感兴趣可自行查阅和在项目中引用。

https://github.com/KunMinX/UnPeek-LiveData

VLOOK 10.2 发布:大纲可搜索、新增激光笔~好用实用的 Typora Markdown 插件

Posted: 17 Jun 2021 10:00 PM PDT

VLOOK™ 是针对 ![Typora] Typora[^Typora] (跨平台 Markdown 编辑器)的 主题包增强插件(针对导出的 HTML 文件)。

VLOOK™ 属于开源软件(遵从 MIT License),也是 ![OSChina]开源中国 推荐的国产开源产品、Typora 的首个增强插件。

VLOOK™ 的所有特性清单,详见快速入坑 → 一键进入

这次是 VLOOK 10.0 大版本的第三个小更新~主要的更新是针对大纲导航、演示辅助工具。

1 )大纲导航面板的内容支持关键字搜索了,文档目录可以更快地一键搜索+直达了。

2 )演示辅助工具新增了激光笔模式,与聚光灯成为了最佳视觉聚焦的黄金组合,在演示过程中随心引导观众的关注焦点。


完整的更新日志内容如下:

文档导航:

  • (+新增)大纲支持关键字搜索
  • (+新增)大纲隐藏后,支持鼠标在左侧悬停激活
  • (+新增)增加段落导航工具栏入口
  • (*修复)逐段导航部分段落跳转问题

表格、演示辅助:

  • (+新增)演示辅助工具:激光笔
  • (*修复)表格行分组中非分组的缩进问题

主题包:

  • (+新增)主题包支持 YAML Front Matter
  • (~完善)主题包完善

基础:

  • (^完善)完善热键处理机制

欢迎 Markdown 粉加入 VLOOK™ 的 Q 群


项目托管于:

各种浏览器竟然都没有从地址栏跳回页面的快捷键

Posted: 17 Jun 2021 09:54 PM PDT

cmd/ctrl + L 可以跳到地址栏,

但 firefox/chrome/safari/brave 都没有跳回去的快捷键。

不知道是啥逻辑??

这个功能比 cmd/ctrl+o 都常用吧??

一个免费开源的 文字转语音 库 / 软件 / 服务 powered by GitHub Action

Posted: 17 Jun 2021 08:56 PM PDT

What

一个开源(Apache License)免费的文字转语音服务 /软件 /库,支持中英文。https://github.com/l-O-O-l/TTS-action

这个是一站式,除了 GitHub, 没有用到第三方的服务,token 等

英文样例: Alice's Adventures in Wonderland, The Tyger By William Blake and Psalms .

中文样例 朱自清 背影 叶挺 囚歌 余光中 乡愁 关雎

更多样例 在这里

Usage

在这个项目里面,新建一个 issue 以 TTS: (优质英文), TTS-F: (快速英文) or TTS-CN: (中文普通话),把需要转的文字写在 issue 里面. 几分钟以后,语音就会生成,链接会在回复里面

中文里面有二十多个不同的声音, 你可以用 TTS-CN: 1$, TTS-CN: 30$ 来转换不同的语音。 具体信息在 docker/ttskit

How

这个项目用的都是开源内容和免费服务,采用了三个不同的引擎

一旦 issue 建立,Github Action 会触发: 首先读需要转换的文字; 然后用引擎生成语音; 再压缩成 mp3 然后 merge; 最后加上链接,关闭 issue.

相关

PS

谁像上次聊天室公测那样,GHS,贴金瓶梅,我这次一定砍死他

求教如何爬取油管评论呢?

Posted: 17 Jun 2021 08:45 PM PDT

怎么爬取油管评论呢? 感觉油管评论很多很有价值的信息。 感觉好多资料说的都不一致,接口都挂了。

急! centos7.9 安装过程中卡住 microcode_ctl……

Posted: 17 Jun 2021 08:28 PM PDT

https://sm.ms/image/s5Hf1oxiZ9pgy36

在这里一直卡着,鼠标也不能移动

关于自定义 redis session 的自动延期问题

Posted: 17 Jun 2021 03:36 PM PDT

一般情况下,用户 30 分钟没操作就会过期,那问题来了,我需要怎么自动延期呢?用户每次访问,我都到 redis 更新一下过期时间?这样的话对 redis 写操作会不会太频繁了点?
各位大佬认为什么方案比较好?

利用服务器剩余的磁盘空间的小方法(大佬们别喷我

Posted: 17 Jun 2021 10:56 AM PDT

前言:随着服务器越来越多,我们在部署服务后可能服务器硬盘存在许多空间,现在我就教大家如何优秀地利用(榨干)服务器硬盘。

服务器这里我选用了腾讯云轻量应用服务器,现在有无忧计划哦!续费超便宜,大家可以试试!

先介绍一下本次所利用的开源项目

Minio

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器 /虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL

引用自官网介绍链接为 http://docs.minio.org.cn/docs/

minio 官网 现在我们来部署一下 minio (其实这东西可以集群啦但是没有必要,官方的集群方法太麻烦啦,也太耗费资源!

推荐使用 docker 部署的方法!

docker 部署

安装 docker (这里可以选择腾讯云轻量应用服务器 docker 镜像,已经默认安装了 docker 并且已经更换为腾讯云的源了)

1.宝塔版本

应用商店-docker 管理器

宝塔安装 docker 2.自行安装(若服务器基于 LXC,openvz 虚拟化无法安装 docker 哦,请看下一种安装方法!

推荐使用 daocloud 一键脚本安装

curl -sSL https://get.daocloud.io/docker | sh

docker 如果提示 curl command not found

请使用 apt-get install curl ( unbutu,debian

centos 使用 yum install curl -y

下面开始部署 minio

docker pull minio/minio (pull 镜像) docker run -p 9000:9000 minio/minio server /data. (可以部署其他端口修改前面的 9000 即可,后面这个命令是数据持久化储存的命令)

注意:防火墙开放 9000 端口!!!!

接下来就可以访问 server-ip:9000 来进入啦!

minio 界面 默认用户名密码为 minioadmin

手动拉取部署

wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio ./minio server /data ( data 可以改为服务器任意目录) 配置守护(不然 ssh 断掉网页端也会断开!) nohup /opt/minio/minio server --address "${MINIO_HOST}:${MINIO_PORT}" /opt/minio-data > /opt/minio/minio.log 2>&1 & 部署完后我们进入 server-ip:9000

进入 minio

这里和云服务厂商一样点击➕号

1.创建自己的储存桶

2.创建好后点击上传可以上传自己的文件

3.点击可以获取临时访问链接

4.修改可见性使用公共可见

创建好后最关键的来啦!我们可以 s3fs 让另一个服务器挂载这一台服务器的 minio,也可以使用支持 s3 通用协议的储存!

sudo yum install epel-releasesudo

yum install s3fs-fuse (安装 s3fs centos )

ubuntu,debian

1

curl https://downloads.plex.tv/plex-keys/PlexSign.key | apt-key add -echo deb https://downloads.plex.tv/repo/deb public main | tee /etc/apt/sources.list.d/plexmediaserver.list

2.apt update && apt install -y plexmediaserver s3fs echo "你的访问 key:你的密钥" > /root/.passwd-s3fs && chmod 600 /root/.passwd-s3fs

3.挂载到本地磁盘

s3fs -o passwd_file=/root/.passwd-s3fs -o url=http://server-ip:9000 -o allow_other -o nonempty -o no_check_certificate -o use_path_request_style -o umask=000 pic /pic

现在使用

df -h 查看是否挂载成功

ThreadPoolExecutor 奇怪的内存增长

Posted: 17 Jun 2021 09:20 AM PDT

看到此贴 2021 年了,requests 内存泄露的问题解决了吗?如果没解决,怎么解决? , 便去测试了下

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED import requests from memory_profiler import profile  s = requests.Session()  def get(i):     s.get('URL')  @profile def test():     executor = ThreadPoolExecutor(max_workers = 100)     task = [executor.submit(get, (i)) for i in range(5000)]     wait(task, return_when = ALL_COMPLETED)     s.close()  if __name__ == '__main__':     test() 

5000 任务,116.3 MB

Line #    Mem usage    Increment  Occurences   Line Contents ============================================================     10     25.6 MiB     25.6 MiB           1   @profile     11                                         def test():     12     25.6 MiB      0.0 MiB           1       executor = ThreadPoolExecutor(max_workers = 100)     13    115.9 MiB     90.3 MiB        5003       task = [executor.submit(get, (i)) for i in range(5000)]     14    116.3 MiB      0.3 MiB           1       wait(task, return_when = ALL_COMPLETED) 

500 任务 10 次,141.3 MB,逐渐增长

Line #    Mem usage    Increment  Occurences   Line Contents ============================================================     10     25.7 MiB     25.7 MiB           1   @profile     11                                         def test():     12     25.7 MiB      0.0 MiB           1       executor = ThreadPoolExecutor(max_workers = 100)     13     94.8 MiB     69.1 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     14    106.2 MiB     11.4 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     15    109.6 MiB      3.4 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     16    111.7 MiB      2.1 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     17    114.3 MiB      2.6 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     18    115.8 MiB      1.5 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     19    120.0 MiB      4.1 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     20    121.0 MiB      1.0 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     21    124.1 MiB      3.1 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     22    124.6 MiB      0.5 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     23    126.7 MiB      2.1 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     24    127.4 MiB      0.8 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     25    130.5 MiB      3.1 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     26    131.8 MiB      1.3 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     27    135.2 MiB      3.4 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     28    136.7 MiB      1.5 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     29    137.7 MiB      1.0 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     30    138.0 MiB      0.3 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     31    139.8 MiB      1.8 MiB         503       all_task = [executor.submit(get, (i)) for i in range(500)]     32    141.3 MiB      1.5 MiB           1       wait(all_task, return_when=ALL_COMPLETED)     33    141.3 MiB      0.0 MiB           1       s.close() 

python2.7 None < 5 return True, python3 就直接报错了

Posted: 17 Jun 2021 08:26 AM PDT

x = {'q2':2} if x.get('q1',None) < 5:   # todo 

字典取值 默认值 None,代码竟然没报错,还到 todo 里面执行了!

No comments:

Post a Comment