推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Kcelone
V2EX  ›  Python

Excel 异步上传并处理后导入数据库设计思路及填坑

  •  
  •   Kcelone · Nov 1, 2018 · 2352 views
  •   You need to sign in to view this topic
    This topic created in 2774 days ago, the information mentioned may be changed or developed.

    这是对前面一个帖子的补充及填坑。

    之前一个帖子大概说了异步处理 Excel 导入数据库的问题,但留了一个坑。就是那个 celery 的任务注册偶现失败问题。

    技术栈: python3.6.5 ,celery4.2.1,mysql 5.7.22 , sqlalchemy, xlrd,tornado,redis

    设计思路再大概啰嗦一下,顺便解决问题:

    1. 准备材料一份 Excel 报表,利用 tornado.web 库中的 RequestHandler 类 request.files 属性获取到前端传来的文件内容(注:此时获取的数据类型 tornado.httputil.HTTPFile, 格式是 bytes)。

    2. 将前端传来的 bytes 数据直接放入 celery 进行异步处理,发现总是报错,原因是 delay()函数不接受非 JSON 序列化类型的参数(Object of type 'bytes' is not JSON serializable"),然后尝试了利用 encode(xx, 'utf-8')进行转码,又会提示 decoding to str: need a bytes-like object, HTTPFile found"( http 文件不是 bytes 类型对象),算了,退而求其次,先将文件上传然后保存至本地再说

    3. 利用 xlrd 库进行本地临时 Excel 文件读取,这样读取出来的格式为字符串格式,celery 处理毫无障碍,读取之后,可以进行数据重组,获取你想要的数据格式,可能是一个列表,字典,或着其他,同时进行去重,排序等操作。

    4. 数据导入,第一次 code,使用的是 sql 原生语句,包括创建临时表,建索引,去重,插入,这时 celery 有时候会不能正常注册任务,导致任务偶现执行失败。后来,一直找不到原因。先不管别的,保证功能正常,所以又把代码重新撸了遍,弃用原生 sql,改用 sqlalchemy orm 方式,然后偶现问题消失,功能正常支撑。然后回过头来分析日志,查看日志发现 redis 莫名崩溃,由于 redis 做了 celery 的队列,所以导致 Not registered 偶现问题,然后继续分析,发现内存过高,所以确定是内存暴涨引起的,还是自身代码问题。

    5. 出坑要点,在数据插入时,当数据量过大时要进行分批处理,且分次提交,以防内存用尽导致某组件崩溃。

    6. 源码就不贴了,有需要可以联系我

    鄙人搞了个 Python 群,有兴趣的加一下,一起讨论问题,如果有好点子,可以在这里找到一起走的道友。 群号:902788038

    Supplement 1  ·  Nov 2, 2018
    2 条中的 encode 是 decode,打错了,抱歉。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1352 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:11 · PVG 01:11 · LAX 10:11 · JFK 13:11
    ♥ Do have faith in what you're doing.