酷徒LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:IMP  loop  async  event  EVE  PEP  API  事件循环  
Implementation of the Python asyncio event-loop api on top of Qt

  • 源代码名称:quamash
  • 源代码网址:http://www.github.com/harvimt/quamash
  • quamash源代码文档
  • quamash源代码下载
  • Git URL:
    git://www.github.com/harvimt/quamash.git
  • Git Clone代码到本地:
    git clone http://www.github.com/harvimt/quamash
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/harvimt/quamash
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • Quamash

    Qt实现 PEP 3156事件循环的实现

    作者:
    标记 Harviston <mark.harviston@gmail.com>,Arve Knudsen <arve.knudsen@gmail.com>
    Latest VersionDownloadsSupported Python versionsLicenseDevelopment StatusLinux (Travis CI) Build StatusWindows (Appveyor) Build StatusGitter

    要求

    Quamash需要带有 backported asyncio 库的python 3.4或者 python 3.3,以及 PyQt4.PyQt5或者 PySide。

    安装

    pip install quamash

    从 0.4版本升级到 0.5

    循环上下文管理器将不再设置事件循环,只关闭它。

    替代:

    with loop:
     loop.run_forever()

    执行:

    asyncio.set_event_loop(loop)#.. .with loop:
     loop.run_forever()

    建议尽早调用 asyncio.set_event_loop,以便避免在调用之前运行异步代码。

    如果在同一应用程序中使用多个不同的循环,那么你就知道在做( 或者至少你希望) 了,然后可以忽略。

    用法

    import sysimport asyncioimport timefrom PyQt5.QtWidgets import QApplication, QProgressBarfrom quamash import QEventLoop, QThreadExecutor
    app = QApplication(sys.argv)
    loop = QEventLoop(app)
    asyncio.set_event_loop(loop) # NEW must set the event loopprogress = QProgressBar()
    progress.setRange(0, 99)
    progress.show()asyncdefmaster():
     await first_50()
     with QThreadExecutor(1) asexec:
     await loop.run_in_executor(exec, last_50)
     #TODO announce completion?asyncdeffirst_50():
     for i inrange(50):
     progress.setValue(i)
     await asyncio.sleep(.1)deflast_50():
     for i inrange(50,100):
     loop.call_soon_threadsafe(progress.setValue, i)
     time.sleep(.1)with loop: ## context manager calls. close() when loop completes, and releases all resources loop.run_until_complete(master())

    变更日志

    版本
    • 大量错误修正和性能改进。
    版本
    • 修复 #62 通过从 QTimer 切换到 QObject.timerEvent 来严重的内存泄漏。
    版本
    • 删除不必要的QObjects
    • 正式添加 python 3.5支持( CI配置和 setup.py 更改)
    • 修复 #55
    • 默认事件循环的行为更好地兼容( #59 )
    • 删除_easycallback并替换为 _makeSignaller
    版本版本版本
    • 修正这里自述文件中rst语法错误
    版本
    • 不使用事件循环作为 asyncio.set_event_loop的方法,现在必须显式调用。
    • 可能修复被称为out-of-order的通知程序( 请参阅 #25, #27, 和 e64119e )
    • 更好的循环清理
    • CI测试现在通过 Windows
    • 测试改进
    • python 3.3支持( 可以能总是支持,但是现在是offially支持/测试)
    版本
    • 对 PEP-3156 一致性的改进
    • 小测试改进
    版本
    • 测试的主要改进
      • Travis CI集成
      • 更多测试
      • 所有测试均通过
      • 跨平台/配置测试
    • Bug #13 发现并固定
    • 强制Qt实现与 QUQMASH_QTIMPL 环境变量一起使用。
    • 实现 QEventLoop.remove_readerQEventLoop.remove_writer
    • 支持 PyQt4
    • 支持 PyQt5
    • 支持 multiprocessing 执行器( ProcessPoolExecutor ) )
    • 代码质量的改进
    版本

    第一个版本值得使用。

    测试

    为了在测试套件中运行测试套件,在命令行中只安装了pytest并执行 py.test。 测试本身位于'测试'目录下。

    测试也可以通过 来完成。 当前 tox.ini 中的tox设置需要在全局安装 pyqt4/5 和 PySide。 ( pip无法将PyQt安装到 virtualenv 中,这是毒性检测的尝试)。 因为这个原因,在specificying运行的环境中运行毒性测试可能是最好的。 使用PyQt5测试 python 3.4的比如 tox -e py34-pyqt5。 这种毒化配置很不可以能在 Windows 上工作,特别是PyQt5和PyQt4不能在 Windows的同一 python 安装中存在。 同样,PyQt4 w/a 奇怪似乎也只是一个 Windows。

    样式测试也通过tox进行。 运行 tox -e flake8

    代码覆盖率

    获得全面的覆盖支持是相当耗时的。 理论上,这可以通过 pytest-xdist 完成,但我没有时间让它工作。 用 pip install pytest-cov 安装 pytest-cov 然后运行 py.test --cov quamash 然后附加一个点和一个标识符,生成的.coverage 文件。 比如, mv. coverage. coverage.nix.p33.pyside 然后在所有要运行的平台上重复。 ( 至少linux和 Windows )。 将所有 .coverage.* 文件放在一个目录中,其中还有quamash源代码。 cd 到该目录并运行 coverage combine 最后为基于html的报表运行 coverage html,或者为简单报表运行 coverage report。 这些最后的命令可能会失败,因为无法找到源代码。 使用 .coveragerc 文件指定equivelant路径。 默认配置在 /quamash 中有linux源代码,在 C:quamash 处有 Windows 源代码。

    支持的平台

    这个项目使用 Travis CI在 linux ( Ubuntu 12.04"Precise Pangolin") 和 Appveyor (。Windows Server 2012 R2,类似 Windows 8 ) 上执行测试来执行 持续集成。

    在linux上,使用 PySide。PyQt4和PyQt5对 python 3.3和 3.4进行测试。 on 1的测试,在第2 个版本中没有提供 Windows的二进制安装程序,但可能不值得在源代码中进行编译。

    python 3.5现在在linux上使用PyQt4和PyQt5进行测试。

    测试矩阵

    PyQt4 PyQt5 PySide ( Qt4 ) PySide 2 ( Qt5 )
    Linux - python 3.3是的是的是的计划计划
    Linux - python 3.4是的是的是的计划计划
    Linux - python 3.5是的是的n/a计划计划
    Windows - python 3.3不是不是是的不是
    Windows - python 3.4是的是的是的计划计划
    Windows - python 3.5计划计划计划计划计划计划计划计划

    许可证

    你可以使用。修改和重新发布这里软件,在 BSD许可协议中。 查看许可证。

    电子邮件名称

    郁金香相关项目是以其他花卉命名的,Quamash是以"q"开头的少数花之一。



    文章标签:API  IMP  Implementation  EVE  event  async  loop  PEP  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷