如何同步多个Workling工作人员?
我有以下情况:
- 三个任务:A、B、C(作为工作人员实现)
- 两个用户事件(控制器方法的调用)
任务以这种方式触发:
- 一个用户事件触发任务 A 和任务 B。
- 第 可选的用户事件可以触发任务 C,但该任务必须在任务 A 和 B 完成后才能运行。
我如何执行这一系列事件?
一种方法是在任务 C 开始时执行任务 A 和 B,但触发任务 C 的用户事件可能永远不会发生,但任务 A 和 B 仍然必须执行。
在“正常”程序中,我可以使用整个同步对象库(互斥体、信号量、临界区……)。但我在这里能做什么呢?
(如果重要的话,Rails 应用程序将在 Linux 服务器上运行,并且 Workling 设置为使用 Starling)
I have the following situation:
- Three tasks: A,B,C (Implemented as Workling workers)
- Two user events (Calls of a controller method)
The tasks are triggered this way:
- The first user event triggers Task A and Task B.
- Then an optional user event can trigger Task C, but that task must not run until Task A and B are finished.
How can I enforce this chain of events?
One way would be to perform Task A and B at the beginning of Task C, but the user event triggering Task C might never happen, but Task A and B must be performed nevertheless.
In a "normal" program I'd have the whole arsenal of synchronization objects at my disposal (mutexes, semaphores, critical sections, ...). But what can I do here?
(If it matters, the Rails application will run on a Linux server and Workling is set up to use Starling)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用分布式锁:
http://github.com/tanin47/ruby_redis_lock (这是我的)
但它需要 Redis。
或者,您可以使用其他数据库管理系统(例如MySQL)自行构建锁库。
You can use a distributed lock:
http://github.com/tanin47/ruby_redis_lock (which is mine)
It requires Redis, though.
Or, you can build a lock library by yourself with other dbms, e.g. MySQL.