【问题标题】:Python: CherryPy and Win32 API in multithreading?Python:多线程中的 CherryPy 和 Win32 API?
【发布时间】:2013-05-16 16:59:26
【问题描述】:

为了向我的 Python 库中添加更多工具,我开始了一个宠物项目 - 一个个人时间管理应用程序,Thyme

目前,该应用由两个进程组成:每 500 毫秒,一个单独的进程通过win32ui 获取焦点窗口,并通过 SQLAlchemy 将其写入 SQLite DB;而主进程启动一个处理应用程序 UI 的 CherryPy Web 服务器。

但是,这两个 Python 进程的总内存占用约为 30MB,我想减少它。我知道做到这一点的一种方法是使用多线程——但我真的不知道它是否值得打开那罐蠕虫。我的用例是否适合多线程方法?

【问题讨论】:

  • 多线程如何减少内存占用?
  • @RobertHarvey 我的印象是这两个线程会以某种方式在同一个 Python 可执行文件下运行,因此使用的内存比两个单独的 python.exes 少。见stackoverflow.com/questions/4214775/…stackoverflow.com/a/3046201/425219
  • 哦,我明白了。嗯,这有点取决于你想要做什么。如果这是某种编组方案,您的第二个可执行文件可能在其他机器上运行,那么在同一个程序中拥有两个线程是行不通的。坦率地说,我不确定为什么需要在同一个可执行文件中进行轮询,除非多个用户共享同一个数据库。另外,现在 30MB 真的很多吗,新机器从 8GB RAM 开始?

标签: python sqlalchemy cherrypy pywin32 python-multithreading


【解决方案1】:

让我们看看:您已经有两个可以运行的程序,并且您希望在同一个进程的线程中运行。一种非常简单的方法是简单地将两者复制在一起,然后在单独的线程中运行每个的 main()。这个问题有多复杂取决于两者之间共享状态的数量。我看到的共享状态是标准输入和标准输出,但除此之外,两者之间的整个通信都是通过 SQLite DB 进行的。如果该数据库的实现方式是程序的两个独立部分不会通过全局状态相互影响,那么您应该没问题。

我的建议:试试看!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多