Pet*_*sen 7 python multiprocessing
我们正在考虑使用复杂的GUI重新分解大型应用程序,该GUI以与后端分离的方式隔离,以使用新的(Python 2.6)多处理模块.GUI /后端接口使用Queues和在两个方向上交换的Message对象.
我刚刚总结的一件事(暂时,但随意确认)是在多处理界面上不会保留"对象标识".目前,当我们的GUI向后端发布消息时,它希望返回相同的消息,并将结果附加为属性.if received_msg is message_i_sent:在某些情况下,它使用对象标识()来标识返回的消息......这似乎不适用于多处理.
这个问题是要问你在实际使用中看到了什么样的"陷阱" ,或者可以想象人们会在天真地使用多处理模块遇到什么,尤其是在重构现有的单进程应用程序时.请说明您的答案是否基于实际经验.用于为问题提供可用解决方法的奖励点.
编辑:虽然我对这个问题的意图是收集一般问题的描述,但我认为我犯了两个错误:我从一开始就把它变成了社区维基(这可能会让很多人忽略它,因为它们不会得到声望点) ,我提出了一个过于具体的例子,虽然我很欣赏答案,但很多人都错过了一般回复的请求.我可能会在一个新问题中重新说出来并重新提出这个问题.就目前而言,我接受一个答案最好只是关于这个问题,只要它与我所包含的具体例子有关.感谢那些做出回答的人!
我本身没有使用多处理,但所提出的问题与我在其他两个领域的经历类似:分布式系统和对象数据库。Python 对象身份既可以是福,也可以是祸!
至于一般问题,如果您正在重构的应用程序可以确认任务正在异步处理,则会有所帮助。如果没有,您通常最终会管理锁,并且通过使用单独的进程可以获得的大部分性能将因等待这些锁而丢失。我还建议您花时间构建一些用于跨进程调试的脚手架。真正的异步过程往往会做的事情远远超出头脑所能容纳和验证的范围——或者至少是我的头脑!
对于所概述的特定情况,当项目排队和返回时,我将在流程边界管理对象标识。当发送要处理的任务时,使用 id() 对任务进行注释,并使用 id() 作为键将任务实例存储在字典中。当任务更新/完成时,通过 id() 从字典中检索确切的任务,并将新更新的状态应用于它。现在,将保留确切的任务及其身份。
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |