社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

一日一技:做项目时Python和Java该如何选择?

未闻Code • 4 年前 • 435 次点击  

一、经验分享

在V2EX上面,有人问做项目的时候,Python和Java应该怎么选择?

我的回答是: 

1. 如果你自己一个人写项目,那么用Python 

2. 如果很多人一起写这个项目,并且每个人都是大佬,那么也用Python 

3. 如果很多人一起写这个项目,但有至少一个人是混子,那么用Java 


如果前面有两条路,一条很长,但是能很平稳的走到终点,另一条需要飞檐走壁,但很快就能到终点。你跟混子说,让他走平稳的长路,但他不会听你的,他自以为自己可以飞檐走壁,结果不仅自己摔了,还把路给炸了。但用Java,在语言层面限制他只能走平稳的长路,让他没有办法做其它选择。这样对项目来说最安全。


二、问题解答

1

序列化场景:redis中有一个键值对,value是java类型的Long(不是基础类型long)。现在我有一个需求是:如何用python代码也能够同样设置一个java里面的Long类型的value。

反序列化场景:从redis中读取value的值如图所示,但是这是一个二进制的串,要怎么反序列化出来处理成python的呢?

点击空白处查看答案

对Python来说,不存在long不long的问题,他就是int。因此,所有字符串形式的序列化都不能用,例如json就不能用。但protobuf/msgpack 是可以标记数据类型的二进制序列化格式。因此,你可以使用protobuf或者msgpack来序列化。这样Java就可以识别到数据类型了。你图中就是一种二进制形式的序列化数据。但需要知道它是用什么东西序列化的,才能反序列化。

2

我希望能够在git push时,自动执行black格式化代码,从而达到提交的代码都是经过格式化的要求,是否有这种设置可以达到这个目的呢?

点击空白处查看答案

有两种方法:1. 设置git hook,它会在你push前自动先做一些自定义操作。你搜索这个关键词就能找到。2. 使用jenkins/GitHub action。你代码提交到GitHub上面后,它自动开始运行拉代码,格式化再推回去。

3

请教下南哥,从文本大量写入MySQL,或者从mysql大量导出到文本有什么高效的办法么?用异步或者多线程有效果么?

点击空白处查看答案

大量写入的时候,要用执行计划,通过executemany一次写入一批数据。一批1000条。读取的时候,看这篇:为什么PyMySQL获取一条数据会让内存爆炸

4

接问题3,大量读的话用pymsql的流式游标是不是可行,不会让内存炸掉,但是测了下读取速度会下降?

点击空白处查看答案

你把数据分段,多起几个线程分别读不同段的就可以了。

5

现在自己研究爬虫,用Python+selenium(已经隐藏掉selenium特征,用公众号介绍的Stealth),现在试着爬Tmall的商品价格,(通过页面直接抓),刚开始抓几个页面还可以,没有障碍,抓10几个页面后,就会弹出来滑动验证,selenium可以自动滑块,但滑块后提示失败 需要重新滑动,滑好几次都是失败,即使人工滑动,也是失败。麻烦给个指点,有什么方法可以通过?

点击空白处查看答案

因为selenium能被识别的特征有很多,你隐藏不干净。第二是淘宝会根据用户行为来判断你是不是爬虫,这不是隐藏特征就行的。行为检测这个很难解决。即使你真人手动用正常的浏览器打开tmall,然后一页一页手工复制商品,复制十多页它也会出现验证码。因为正常购物的用户不会有你这个行为。它用的是群控,需要通过手机集群操作app来抓的数据。


南哥,请问下,我们公司是个创业型的公司,数据量应该是在十亿到百亿级,最近准备搭建分布式数据库,mysql和mongodb的分布式采用那种方式比较好呢,我测试过很多方式效果都不是太好,也有可能是哪里配置不好,还测试过tidb数据库这些,实在是没有头绪,还望南哥和各位大佬们指引方向!

这个数据量绝对不要用mysql。它根本撑不住。mongodb能撑住几亿数据的写入,但是撑不住查询。给你两个建议:


1. 如果你主要是搜索,用Elasticsearch。

2. 如果你涉及大量group by这种聚合查询,用clickhouse。它的性能极高,单机单节点,在4亿数据里面聚合查询,结果秒出。你100亿数据,用三台机器部署clickhouse就够了。


不过他们都有短板。elasticsearch不适合复杂的聚合查询。clickhouse不适合频繁更新已有数据。有时候可能要两个结合起来用。

ok,了解,我以为是我配置问题造成测试效果不好,我去试试clickhouse,感谢,受教了!

创业公司哪来的这么多数据?

哦,我是计算未来可能增长数据量,目前很长一段时间可能就一亿左右,或者说我可以先不用考虑那么长远?

不要过度设计,强大的设施一般都有代价。基础设施应该跟软件和数据规模相匹配才好。预留一定的冗余。规模上升到现有的基础设施快要撑不住的时候再升级。

好的,那这样的话,mongodb+es是不是比较好的方案呢?

是的

END

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

在“未闻 Code技术交流群”等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127637