鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 16

python3生成条形码效率问题

[复制链接]
发表于 2019-6-5 10:04:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import easygui as e
  2. import os
  3. from pystrich.code128 import Code128Encoder
  4. def create():
  5.         path=e.fileopenbox("请选择要生成条形码的内容")
  6.         dir1 = e.diropenbox("请选择保存路径")
  7.         os.chdir(dir1)
  8.         f = open(path,"r")
  9.         for code in f:
  10.                 code2 = code[:11]
  11.                 encoder=Code128Encoder(code2)
  12.                 encoder.save(code2+".png",bar_width=2)
  13.         e.msgbox("生成条形码完成")
  14. create()
复制代码

效率很低,我生成1100个码居然用了68s,然后我用另外一个别人的软件生成3S就搞定了,大佬们看看怎么才能提升一下速度
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-5 10:48:29 | 显示全部楼层
IO操作肯定低了,最好一次性写入,而不是生成一个保存一个。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 11:36:46 | 显示全部楼层
凌九霄 发表于 2019-6-5 10:48
IO操作肯定低了,最好一次性写入,而不是生成一个保存一个。

我需要每个命名都不同,所以把保存写在循环里面,你有什么好的建议吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 11:53:43 | 显示全部楼层
本帖最后由 凌九霄 于 2019-6-5 11:55 编辑

把生成的东西存入字典,然后迭代写入文件试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 11:55:21 | 显示全部楼层
凌九霄 发表于 2019-6-5 11:53
把生成的东西存入列表,然后迭代写入文件试试

不一样吗?现在也是迭代写入,你说的那样还多一步写入列表,更占内存吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 11:56:52 | 显示全部楼层
我不确定。主要是那个save费时间
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 11:57:55 From FishC Mobile | 显示全部楼层
多线程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 12:01:52 | 显示全部楼层
凌九霄 发表于 2019-6-5 11:56
我不确定。主要是那个save费时间

按照你说的试了,效率没有变化
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 12:02:23 | 显示全部楼层

想到这个方法了,但是还没有学习相关知识,可以帮忙改一下吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 12:22:06 | 显示全部楼层
python小兵222 发表于 2019-6-5 12:02
想到这个方法了,但是还没有学习相关知识,可以帮忙改一下吗

多线程也要看硬盘的IO性能,特别是你这种大量小文件的写入
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 12:33:38 | 显示全部楼层
本帖最后由 凌九霄 于 2019-6-5 12:44 编辑

测试了下,原始程序1100条数据在我的机器上大概10s以内就能完成写盘,一定要有快的感觉,就另开一个线程放后台写盘就好了。

比如下面这个看起来秒成

  1. import os
  2. import threading
  3. import easygui as e
  4. from pystrich.code128 import Code128Encoder

  5. test = {}


  6. def create():
  7.     path = e.fileopenbox("请选择要生成条形码的内容")
  8.     dir1 = e.diropenbox("请选择保存路径")
  9.     os.chdir(dir1)
  10.     f = open(path, "r")
  11.     for code in f:
  12.         code2 = code[:10]
  13.         encoder = Code128Encoder(code2)
  14.         test[code2] = encoder

  15.     e.msgbox("生成条形码完成")


  16. def drawpic(d):
  17.     for i, j in d.items():
  18.         j.save(i + ".png", bar_width=2)


  19. t1 = threading.Thread(target=create(), args=(1,))
  20. t2 = threading.Thread(target=drawpic(test), args=(1,))
  21. t1.start()
  22. t2.start()
  23. t1.join()
  24. t2.join()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 14:08:49 | 显示全部楼层
凌九霄 发表于 2019-6-5 12:33
测试了下,原始程序1100条数据在我的机器上大概10s以内就能完成写盘,一定要有快的感觉,就另开一个线程放 ...

您这个在我这测试的比原来快了10s左右,比我用另外一个软件生成还是差的很多,那个软件在我这大概3秒钟就能完成,现在您这个在我这机器上是56秒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 14:12:17 | 显示全部楼层
凌九霄 发表于 2019-6-5 12:33
测试了下,原始程序1100条数据在我的机器上大概10s以内就能完成写盘,一定要有快的感觉,就另开一个线程放 ...

不好意思,刚才没仔细看,券码位数你给改成了10位,我改回11位之后效率还是和之前一样没变化
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-5 14:37:35 | 显示全部楼层
测试了一下,仅生成条码,而不保存,基本上是瞬间完成的。对于磁盘操作多线程并不能显著加速。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 15:12:36 | 显示全部楼层
冬雪雪冬 发表于 2019-6-5 14:37
测试了一下,仅生成条码,而不保存,基本上是瞬间完成的。对于磁盘操作多线程并不能显著加速。

那除了提升磁盘性能职位是否有其他优化的方法呢?因为我用另外一个软件生成就很快,是开发语言的硬伤吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 15:19:34 | 显示全部楼层
冬雪雪冬 发表于 2019-6-5 14:37
测试了一下,仅生成条码,而不保存,基本上是瞬间完成的。对于磁盘操作多线程并不能显著加速。

还有另外一个问题,使用pystrich生成的条形码没有找到调整样式的相关文档,比如我想不显示下面的文字,您是否知道怎么调整呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 15:20:13 | 显示全部楼层
凌九霄 发表于 2019-6-5 12:33
测试了下,原始程序1100条数据在我的机器上大概10s以内就能完成写盘,一定要有快的感觉,就另开一个线程放 ...

还有另外一个问题,使用pystrich生成的条形码没有找到调整样式的相关文档,比如我想不显示下面的文字,您是否知道怎么调整呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 06:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表