首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  praynise  ›  全部回复第 1 页 / 共 2 页
回复总数  29
1  2  
39 天前
回复了 Fiery123 创建的主题 Go GO 任务队列矿建
建议配合其他定时任务工具来实现吧,go 下面有很多定时任务包
主要还是针对 go 开发,python 还是没有寻找到一个好的批量离线部署方式,现在越来越多的把 python 的工具用 go 重写了…
@tulongtou 因为有些依赖 C 的东东没法交叉编译…例如我这边开发很多需要用到 oracle 的驱动,这个交叉编译就会报错
@azh7138m 这个可以,非常感谢
回来填个坑,留一个自己的优化思路和成果…
查了一些资料,使用 interface 的性能会受到较大的影响,以前的程序中使用 interface 过多,直接影响了效率
新的思路如下
首先查询出各字段类型,针对不同的字段类型直接例如 excel 库的方法插入对应类型的数据。
具体为:使用一个线程查询数据库,使用[]sql.Rawbyte 作为接收数据库数据的载体,通过一个 interface{}列表进行 scan,不断将[]sql.Rawbyte 存入通道
另外一个线程不断获取[]sql.Rawbyte 并根据字段类型进行转换。为了进一步加快速度,首先可以声明一个 map[int]func(raw sql.Rawbyte,cell *xlsx.Cell),利用字段位置直接设置好每个位置该调用什么方法
经过测试,改进后的程序执行效率大幅度提高,导出数据效率比 python 版本快了一倍,耗时缩短一半
代码说明如下:
概述:小弟的程序可以通过输入数据库类型、数据库连接字符串、执行 sql 或者含有 sql 的文件等,将数据库中的 sql 查询出来并写入 excel
性能:目前导出 25W 条数据,每行数据 5 个字段,数据库类型 oracle,驱动 goracle,excel 生成库使用 excelize,用时 1 分 33 秒;同环境使用 python3.6,数据库驱动 cx_Oracle,excel 生成库使用 pyexcelerate,同样的查询语句,用时 51s (是的…没干过 python/(ㄒoㄒ)/~~)
程序描述:为了提升执行效率,小弟使用了 goruntine,一个线程专门执行 sql 并将结果生成[]interface{}并装入通道,另外一个线程不断的从通道中取出[]interface{}并写入 excel
个人感觉可能存在的问题点:
1、golang 的数据库查询方式只能一条一条生成,同时,机制用到了反射,而不像 python 可以通过 fetchmany 一次性获取大量数据,不知道此处是否会有性能差距
2、当字段类型是 date 类型时,当字段为空时,如果不做 isZero 判断,输出到 excel 的日期零值很异常(值为-5XXXXX,显示为##########)。所以每取出一条[]interface{},都需要挨个判断类型是不是日期,如果是日期的话,是不是零值,此处可能会影响效率。而 python 没有这个问题

请各位 golang 大大给提点优化意见吧,谢谢大家
@860670496 你好,我需要使用 setSheetRow 按行插入数据,然后再按照行来统一设定本文,请问可以实现么
fabric 有 python3 版本的 fabric3,基本上和 fabric 保持了版本和功能一致(不过每次都是 python2 版本先更新,python3 版本可能要晚个一段时间,如果是小更新的话可能不同步更新)
既然想要用 paramiko,说明可以接受基于 ssh 的调用吧?那样的话,如果规模小可以选择 fabric,如果规模大一点可以选择 ansible 和 saltstack
@MeteorCat 都配置了
@nekoyaki 这个帮了我大忙了,而且还帮我发现了个不小的坑,谢谢啦,哈哈
2018-02-07 08:52:44 +08:00
回复了 praynise 创建的主题 Go 请问 go 语言以./proName 的方式调用外部程序? os/exec 写蒙了…
@ChristopherWu 没有看懂您的意思,可以麻烦详细解释如何使用./来执行吗?
先付上我自己的理解:Command 第一个参数为 path,实际上是通过$PATH 环境变量进行检索,看第一个参数中的内容是否在$PATH 变量内,如果存在,则视为可执行,如果不存在,会直接返回错误。此参数为必填参数
第二个参数开始,则为 path 所需要的参数,非必填,但是如果填写了,必须是 PATH 的参数
基于这个理解,首先./程序,程序并不一定在$PATH 中,使用 exec.Command('程序名')的方式会报错:未找到 PATH 中有可执行文件。如果将程序加入 path,再执行 exec.Command('程序名'),则会提示 exec format error。同时 name 参数中直接输入“./程序名” 也没法进行操作
麻烦您了,谢谢
2018-01-29 19:14:02 +08:00
回复了 Oliverleon 创建的主题 程序员 不考虑预算,顶配 MacBook Pro 和顶配 Dell xps15 选择哪一个
不玩游戏的话坚决推荐 macbook pro 吧…不过二代蝶式键盘的确是需要习惯一段时间,另外接口可能不太够用,需要自己配个转接头。win 本做开发还是不顺手,尤其是遇到混合编程的时候。例如自己比较常遇到的,shell+python+golang,macbook 上可以一套流程写完测完然后直接往服务器上一扔,win 就只能装虚拟机安装 linux 了…
2018-01-09 17:25:18 +08:00
回复了 eamon666 创建的主题 Python 想学 Python ,先学 PY2 还是 3 呢
区别不大,但是很多建议学 3。毕竟越来越多的包已经开始不支持 2 了
2018-01-03 08:56:11 +08:00
回复了 jfry 创建的主题 Python [请教]数据迁移程序的并发应当考虑哪些方面以及如何实现?
想问一下最基本的数据迁移是怎么实现的?靠游标吗?还是 pandas 的 to_sql ?我没有看源码…不过,提几点自己经常涉及的,看看是否能给楼主一点点提示:
1、我自己试过使用多线程加游标的方式,或者 pandas 的 to_sql,个人感觉,pandas 的 to_sql 最慢,多线程加游标略好一点,不过都比不上数据库自带导出+装载功能。多线程感觉并不稳定,被自己 pass 掉了。而协程应该是需要配合非阻塞库使用吧?自己没有试过…
1.1、之前还考虑过一种思路,就是通过并发,目标数据库建立多个临时表,使用多进程加 insert many 方法,最后再把这几个表 union all 起来合成目标表(针对 insert 会对表加锁的情况)
2、Extract 数据落地方向:基本各数据库都有自己的文本导出功能,楼主可以封装一下这些命令,做一个源数据库的判断,实现最快的卸载效率,我自己的环境中,db2 使用 db2 export,oracle 使用 sqluldr2,视表的情况还可以根据分区键生成多个文件并发卸载,速度挺快的。而 Transform 在 export 的时候可以使用 sql 提前实现
3、Load 数据装载方向:装载文本可以增加并发,例如把分本分割成几分,实现并发装载
以上是自己平时工作中的一点尝试和实现,希望能够对楼主有一点点帮助吧
2017-12-29 21:44:28 +08:00
回复了 qsnow6 创建的主题 Python 怎么把 Python 编译器打包,并且添加自己的模块?
也可以试试 cx_freeze,我用 pyinstaller 打包运行不成功的就会试试 cx_freeze,可能会成功的…不过 cx_freeze 不支持 onefile 模式
2017-12-08 16:09:47 +08:00
回复了 Crofy 创建的主题 Python 请教各位大神如何更好的自学 Python ,人生苦短,我需要 Python .
楼主有啥需求方向没有?想用 python 做什么。先定个小目标,然后再实现
2017-12-08 12:52:34 +08:00
回复了 swx934 创建的主题 Python pip3 install pyzmail 提示错误,不知道怎么解决
你用的 python 是多少版本的啊,如果是 3.6 的话有一个专门的 pyzmail36
@gstqc 没法删掉的,zabbix-web-pgsql-3.4.4-2.el6.noarch 依赖 zabbix-web-3.4.4-2.el6.noarch …
1  2  
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3299 人在线   最高记录 4385   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 1029ms · UTC 05:08 · PVG 13:08 · LAX 21:08 · JFK 00:08
♥ Do have faith in what you're doing.
沪ICP备16043287号-1