V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
cjq8z
V2EX  ›  Python

Python 运行时硬盘一直有写入

  •  
  •   cjq8z · 2018-07-24 12:33:39 +08:00 via Android · 2114 次点击
    这是一个创建于 2075 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在在学习 Python,发现一件有件事不是太明白,我的 Python 程序在运行时一直有写硬盘的操作,又没有读取,我全部的操作在内存里完成,并没有涉及到文件读写,这个写硬盘来源在哪里?
    Python 程序主要作用是截图并识别文字
    用到三个:win32API、OpenCV 和 pytesseract
    win32API 是用来截图,
    OpenCV 是把截图转换成二值图
    pytesseract 识别二值图,return 出识别结果。

    在程序运行时,发现 win32 每次截图,win8.1 系统资源管理器都显示有 50kb/s 左右的写入操作,时间不到一秒。我对 win32API 截图操作以 200ms 间隔迭代了两万多次,发现硬盘一直在写入,速度大概在 53kb/s,但是在中间没有任何读取操作。

    如果我的程序完整运行,在迭代过程中,发现资源管理器会显示硬盘写入速度在 170kb/s 左右。

    不明白的,这个写入究竟写的是什么内容,我全部操作都在内存里完成,不涉及到写文件操作。
    5 条回复    2018-07-24 13:14:35 +08:00
    laqow
        1
    laqow  
       2018-07-24 12:40:42 +08:00 via Android
    跟图片有关的缓存都是写在 temp 里的可以自己翻源码
    cjq8z
        2
    cjq8z  
    OP
       2018-07-24 12:41:28 +08:00 via Android
    win32api 代码如下:
    import win32gui
    import win32ui
    hwnd = win32gui.FindWindow(None, windowname)
    wDC = win32gui.GetWindowDC(hwnd)
    dcObj=win32ui.CreateDCFromHandle(wDC)
    cDC=dcObj.CreateCompatibleDC()
    dataBitMap = win32ui.CreateBitmap()
    dataBitMap.CreateCompatibleBitmap(dcObj, w, h)
    cDC.SelectObject(dataBitMap)
    cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), win32con.SRCCOPY)
    #dataBitMap.SaveBitmapFile(cDC, bmpfilenamename)
    我在这里就把 pycdc 转换成了 numpy,保存在变量里,在后面代码运行后,就 return 这个变量出去。
    # Free Resources
    dcObj.DeleteDC()
    cDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, wDC)
    win32gui.DeleteObject(dataBitMap.GetHandle())
    cjq8z
        3
    cjq8z  
    OP
       2018-07-24 12:47:34 +08:00 via Android
    @laqow 非计算机专业,没有系统学过编程,对这些不是太明白。我用过 pillow 截图,这个要 50ms,速度不够快,win32API 只要 10ms,用 pillow 而这个也有写硬盘操作。像这种缓存,有没有办法避免它写,如果不想它写,该如何解决?
    wwqgtxx
        4
    wwqgtxx  
       2018-07-24 13:10:43 +08:00 via iPhone
    你去翻翻 pytesseract 的源码,有些使用他是调用 tesseract.exe 的,那样的话需要先把图片写入硬盘再让 exe 读取
    cjq8z
        5
    cjq8z  
    OP
       2018-07-24 13:14:35 +08:00 via Android
    @wwqgtxx 谢了老哥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5331 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:04 · PVG 16:04 · LAX 01:04 · JFK 04:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.