【问题标题】:Python concurrency performance [closed]Python并发性能[关闭]
【发布时间】:2012-10-23 13:45:05
【问题描述】:

我第一次在 Python 中遇到并发问题,我的目标是优化我的脚本。基本上我有一个脚本,它使用 os.system 针对某些文件调用第三方 jar 工具。在使用线程(threading.Threadthreading.Queue)127 之后,我的第一个“程序”版本大约需要 135 秒才能完成,现在切换到多进程(multiprocessing .Processmultiprocessing.JoinableQueue) 113 秒...但仍然需要很多时间...您能否给我一些反馈和/或指出一篇可能解决问题的文章我的问题?

(我使用的是 Python 2.7.1,我想避免使用 3d 派对模块)

【问题讨论】:

  • 这完全取决于你想要做什么。由于您使用 jar 文件和 os.system,因此响应时间的主要因素可能在您的 java 应用程序中。如果您想得到答案,请给我们更多信息。
  • 我正在使用 Google Closure JavaScript 编译器
  • 你尝试过 subprocess.Popen 吗?
  • 不...我会读到它;)
  • 你在什么系统上运行这个?您的线程/进程如何独立运行?如果您的代码中的瓶颈是顺序执行并且您的并发解决方案是有效的,那么您在此处给出的时间看起来并不像您预期​​的那样。

标签: python multithreading performance concurrency parallel-processing


【解决方案1】:

许多人似乎认为多线程会“神奇地”加速他们的应用程序。多线程可能带来的性能提升取决于几个因素:主要是 CPU 内核的数量和应用程序的类型。

当我说“应用程序的类型”时,我指的是将您的应用程序分成多个部分并并行执行是否有意义。您没有提供足够的信息让我们能够确定这一点,但您应该对其进行分析并尝试确定它是否有意义。

当今的大多数 CPU 都是多核的,因此线程不应受此约束,除非您创建的线程多于内核,因此请注意创建的线程数量。

如果您想知道为什么多处理(分叉进程)比线程更快,这很可能是由于 Python Global Interpreter Lock (GIL) 导致 Python 多线程性能不佳。

更新:如果您正在编译(基于您的评论:“我正在使用 Google Closure JavaScript 编译器”)并且想坚持使用 Python,您应该尝试SCons。它是一个非常酷的构建工具,它的构建脚本都是用 Python 编写的。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2016-10-20
    • 2014-04-28
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多