问题标签 [multiprocessing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2545 浏览

python - 使用多处理时获取堆栈跟踪的最佳方法是什么?

我想知道当通过多处理模块执行的函数内部存在异常时获取堆栈跟踪的最佳方法。这是一个例子:

这打印:

所以没有有用的堆栈跟踪,这很烦人。我目前的解决方案:

有没有办法在没有所有样板代码的情况下获得这种行为?如果没有,不包括此功能的原因是什么?

编辑:可以为样板代码使用装饰器,但我不知道标准库中是否包含这样的装饰器?

0 投票
3 回答
5588 浏览

python - 多处理启动太多 Python VM 实例

我正在编写一些生成进程以运行后台任务的多处理代码(Python 2.6.4、WinXP)。在玩一些琐碎的例子时,我遇到了一个问题,我的代码只是不断地产生新的进程,即使我只告诉它产生一个固定的数字。

该程序本身运行良好,但如果我查看 Windows 任务管理器,我会不断看到新的“python.exe”进程出现。随着程序的运行(最终使我的机器挨饿),它们只会越来越多地产生。


例如,
我希望下面的代码启动 2 个 python.exe 进程。第一个是程序本身,第二个是它产生的子进程。知道我做错了什么吗?

0 投票
3 回答
1378 浏览

python - 天真地使用 Python 多处理会遇到什么问题?

我们正在考虑重构一个具有复杂 GUI 的大型应用程序,该 GUI 以与后端分离的方式隔离,以使用新的 (Python 2.6) 多处理模块。GUI/后端接口使用具有双向交换消息对象的队列。

我刚刚总结的一件事(暂定,但随时确认)是“对象身份”不会在多处理接口中保留。目前,当我们的 GUI 向后端发布消息时,它希望返回相同的消息,并将结果作为属性附加。在某些情况下,它使用对象标识 ( if received_msg is message_i_sent:) 来识别返回的消息……这似乎不适用于多处理。

这个问题是问你在实际使用中看到过什么“陷阱”,或者可以想象在天真地使用多处理模块时会遇到什么“陷阱”,尤其是在重构现有的单进程应用程序时。请说明您的回答是否基于实际经验。为问题提供可用解决方法的奖励积分。

编辑:虽然我提出这个问题的目的是收集一般问题的描述,但我认为我犯了两个错误:我从一开始就将其设为社区 wiki(这可能会让很多人忽略它,因为他们不会获得声誉积分) ,并且我包含了一个过于具体的示例——虽然我很欣赏这些答案——但可能让很多人错过了一般回复的请求。我可能会在一个新问题中重新措辞并重新提出这个问题。目前,我最好接受一个答案,以结束与我所包含的具体示例相关的问题。感谢那些回答的人!

0 投票
3 回答
3709 浏览

python - 使用多处理时出现奇怪的解酸错误

使用多处理时出现以下错误:

我完全不知道这意味着什么,尽管这听起来像是 C 级别的问题。任何人都可以对此有所了解吗?

更新:好的,所以我想出了如何解决这个问题。但我还是有点困惑。我正在返回这个类的一个实例:

如果我返回这个对象的一个​​实例,我会得到错误。但是,如果我调用to_dict并返回字典,它就可以工作。我究竟做错了什么?

0 投票
5 回答
3495 浏览

python - Python:将 GUI 进程与核心逻辑进程分离

我正在开发一个用于处理计算机模拟的Python 项目,并且我也在为它开发一个 GUI。(核心逻辑本身不需要 GUI。)我使用的 GUI 工具包是 wxPython,但我认为我的问题足够笼统,不依赖于它。

GUI 当前的工作方式是在与 GUIgarlicsim相同的进程和线程上启动核心逻辑包(称为 )。这行得通,但我知道这是一个有问题的方法,因为如果核心逻辑需要进行一些硬计算,GUI 会挂起,我认为这是不可接受的。

我应该怎么办?

我听说了在与 GUI 不同的进程上启动核心逻辑的选项。这听起来很有趣,但我对此有很多疑问。

  1. 我是使用multiprocessing包还是subprocess包来启动新流程?
  2. 如何从 GUI 过程轻松访问模拟数据?毕竟,它将被存储在另一个进程中。用户应该能够轻松流畅地浏览模拟的时间线。如何才能做到这一点?
0 投票
3 回答
5382 浏览

python - 是否有任何理由使用 threading.Lock 而不是 multiprocessing.Lock?

如果软件项目支持多处理已向后移植到的 Python 版本,是否有任何理由使用threading.Lockover multiprocessing.Lockmultiprocessing锁也不是线程安全的吗?

就此而言,是否有理由使用其中的任何同步原threadingmultiprocessing

0 投票
2 回答
3607 浏览

multithreading - 多进程网络服务器与多线程网络服务器?

我想知道为什么我们更喜欢让 web 服务器多线程

而不是使它成为多进程Web服务器....

是不是因为遗留问题......

我想听听实际原因和理论上的原因

0 投票
3 回答
1780 浏览

python - 检测进程是否已经在运行并与之协作

我正在尝试创建一个程序来启动一个进程池,比如说 5 个进程,执行一些操作,然后退出,但让 5 个进程保持打开状态。稍后,用户可以再次运行该程序,而不是启动新进程,而是使用现有的 5。基本上它是一个生产者-消费者模型,其中:

  1. 生产者的数量不同。
  2. 消费者的数量是恒定的。
  3. 生产者可以由不同的程序甚至不同的用户在不同的时间启动。

我正在使用multiprocessing目前在 Python 2.6.4 中的内置模块,但打算最终迁移到 3.1.1。

这是一个基本的使用场景:

  1. 开始状态 - 没有进程在运行。
  2. 用户启动program.py operation- 一个生产者,五个消费者运行。
  3. 操作完成 - 五个消费者正在运行。
  4. 用户启动program.py operation- 一个生产者,五个消费者运行。
  5. 用户启动program.py operation- 两个生产者,五个消费者运行。
  6. 操作完成 - 一个生产者,五个消费者运行。
  7. 操作完成 - 五个消费者正在运行。
  8. 用户启动program.py stop并完成 - 没有进程运行。
  9. 用户启动program.py start并完成 - 五个消费者正在运行。
  10. 用户启动program.py operation- 一个采购员,五个消费者运行。
  11. 操作完成 - 五个消费者正在运行。
  12. 用户启动program.py stop并完成 - 没有进程运行。

我遇到的问题是我不知道从哪里开始:

  1. 检测消费者进程正在运行。
  2. 从以前不相关的程序中访问它们。
  3. 以跨平台的方式执行 1 和 2。

一旦我能做到这一点,我就知​​道如何管理流程。必须有一些可靠的方法来检测现有进程,因为我已经看到 Firefox 这样做是为了防止 Firefox 的多个实例运行,但我不知道如何在 Python 中做到这一点。

0 投票
2 回答
689 浏览

python - 监视另一个进程(svn)

我有一个 python 脚本可以从存储库列表中下载源代码,其中一些很大。

有时,svn 在结帐过程中挂起。有没有办法监视 svn 进程,所以我知道它是否挂起?

0 投票
1 回答
1228 浏览

python - multiprocessing.Process 子类适用于 Linux 但不适用于 Windows

我试图让python-gasp在 Windows 上工作,但是当我这样做时,import gasp; gasp.begin_graphics()我得到以下回溯:

知道为什么我在 Windows XP 上出现此错误,但在 Ubuntu Linux 9.04 上却没有?

如果有帮助,它看起来像是( defscreen.updater )的一个实例。有问题的文件位于http://bazaar.launchpad.net/~gasp-dev/gasp-core/main/annotate/head%3A/gasp/backend.pyUpdater(multiprocessing.Process)