多进程管理
Multiple processes management
只是想知道最好的方法是什么:
假设我有 3 个进程,每个进程都完成其工作,计算数据并将数据传递给最终进程,其功能是从其他进程获取数据并填充数据库。
让最后一个进程自己离开的原因是其他 3 个进程可能需要不同的时间才能完成,所以我希望它们中的每一个在完成工作后立即将数据传递给最后一个进程为了避免浪费时间,我不希望多个进程同时写入数据库。
但是要做到这一点,每个进程都需要知道最后一个进程是否忙,如果可用则发送它们的数据,否则等待它完成再发送。
我的想法是使用 'whenever' gem 并创建 3 个自己 运行 的进程,但我对最后一个感到困惑,因为我对守护进程等知之甚少,而且我知道我可能会使所有这一切变得比实际情况复杂得多。
欢迎任何建议,谢谢。
所以我想我可以对您的问题提供一些见解。我的开发团队使用由我们的数据库支持的自制消息队列。这意味着消息(工作元数据)存储在我们的 messages
table.
中
然后我们的 rails 应用程序使用 daemons gem 创建一个守护进程。它使实例化守护进程变得非常 simpler.There 无需担心什么是守护进程;它们只是 linux/unix 在后台 运行 的进程。
您特别提到您不希望多个进程写入您的数据库 听起来您确实担心多个守护进程试图 read/write 相同 table(如果不是,请纠正我,以便我修改我的答案)。
为了避免这个问题,您可以使用 row-level locking 来发送消息 table。这样一来,守护进程就不必每次都锁定整个 table 来查看是否有任何工作要接。
您还提到使用3个进程(出于习惯我也称它们为守护进程)来执行任务,然后在这三个完成后通知另一个进程。您可以将此功能实现为您的 3 名员工留下的 specific/unique 消息。
例如:工人A完成了他的工作,所以他写了一条自定义消息给special_messages_table
。工人 B 和 C 在那里完成任务,也写到这个 table。现在,在这些守护进程处理的整个过程中,您的第三个守护进程将轮询 special_messages_table
以查看这三个作业的任何组合是否已完成。一旦它检测到他们有,它就可以开始了。
这只是关于如何使用守护进程来完成您所要求的内容的粗略概述。如果您提供更多详细信息,我很乐意完善我的答案。不要害怕守护进程!
只是想知道最好的方法是什么: 假设我有 3 个进程,每个进程都完成其工作,计算数据并将数据传递给最终进程,其功能是从其他进程获取数据并填充数据库。
让最后一个进程自己离开的原因是其他 3 个进程可能需要不同的时间才能完成,所以我希望它们中的每一个在完成工作后立即将数据传递给最后一个进程为了避免浪费时间,我不希望多个进程同时写入数据库。 但是要做到这一点,每个进程都需要知道最后一个进程是否忙,如果可用则发送它们的数据,否则等待它完成再发送。 我的想法是使用 'whenever' gem 并创建 3 个自己 运行 的进程,但我对最后一个感到困惑,因为我对守护进程等知之甚少,而且我知道我可能会使所有这一切变得比实际情况复杂得多。
欢迎任何建议,谢谢。
所以我想我可以对您的问题提供一些见解。我的开发团队使用由我们的数据库支持的自制消息队列。这意味着消息(工作元数据)存储在我们的 messages
table.
然后我们的 rails 应用程序使用 daemons gem 创建一个守护进程。它使实例化守护进程变得非常 simpler.There 无需担心什么是守护进程;它们只是 linux/unix 在后台 运行 的进程。
您特别提到您不希望多个进程写入您的数据库 听起来您确实担心多个守护进程试图 read/write 相同 table(如果不是,请纠正我,以便我修改我的答案)。
为了避免这个问题,您可以使用 row-level locking 来发送消息 table。这样一来,守护进程就不必每次都锁定整个 table 来查看是否有任何工作要接。
您还提到使用3个进程(出于习惯我也称它们为守护进程)来执行任务,然后在这三个完成后通知另一个进程。您可以将此功能实现为您的 3 名员工留下的 specific/unique 消息。
例如:工人A完成了他的工作,所以他写了一条自定义消息给special_messages_table
。工人 B 和 C 在那里完成任务,也写到这个 table。现在,在这些守护进程处理的整个过程中,您的第三个守护进程将轮询 special_messages_table
以查看这三个作业的任何组合是否已完成。一旦它检测到他们有,它就可以开始了。
这只是关于如何使用守护进程来完成您所要求的内容的粗略概述。如果您提供更多详细信息,我很乐意完善我的答案。不要害怕守护进程!