首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多进程管理

多进程管理
EN

Stack Overflow用户
提问于 2016-02-16 16:43:16
回答 1查看 334关注 0票数 0

我只想知道最好的方法是什么:假设我有3个进程,每个进程都完成它的工作,计算并将数据传递给一个最终进程,其功能是从其他进程获取数据并填充一个DB。

离开最终进程本身的原因是,其他三个进程可能需要一个可变的时间来完成,所以我希望每个进程在完成任务后立即将数据传递给最后一个进程,以避免浪费时间,而且我不希望多个进程同时写入DB。但要做到这一点,每个进程都需要知道最终进程是否繁忙,如果可用,则发送它们的数据,否则在发送之前等待它完成。我的想法是使用‘任何时候’的宝石和创建3个进程将自己运行,但我感到困惑的最后一个,因为我不太了解守护进程和类似的,我知道,我可能会使所有这些比它真正的复杂得多。

任何建议都欢迎,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-16 23:11:26

所以我想我可以对你的问题提供一些见解。我的开发团队使用了一个由我们的数据库支持的本地消息传递que。这意味着消息(作业元数据)存储在我们的messages表中。

然后,我们的rails应用程序使用守护进程 gem创建一个守护进程。它使得实例化守护进程变得更加简单,无需担心守护进程是什么,它们只是后台运行的linux/unix进程。

--您特别提到了不希望多个进程写入db --听起来您真的很担心来自试图读取/写入同一个表的多个守护进程的死锁问题(如果不是,请更正我,这样我就可以修改我的答案)。

为了避免此问题,您可以对您的messages表使用行级锁定。这样,每当守护进程想要查看是否有任何作业可选时,它就不必锁定整个表。

您还提到使用3个进程(出于习惯我也称它们为守护进程)来执行任务,然后在这三个进程完成后,通知另一个进程。您可以将此功能实现为3名工作人员留下的特定/唯一消息。

例如: worker A完成了他的工作,所以他向special_messages_table写了一条自定义消息。工人B和C完成那里的任务,并写到这个表。现在,在处理这些守护进程的整个过程中,您的第三个守护进程将轮询special_messages_table,以查看这三个作业的任何组合是否已经完成。一旦检测到它们有,它就可以启动。

这只是对如何使用守护进程来完成所要求的任务的一个粗略的概述。如果你能提供更多的细节,我很乐意完善我的答案。不要害怕守护进程!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35438173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档