我正在使用 beanstalkd 的 Perl 客户端。我需要一种简单的方法来避免两次将相同的工作排入队列。
我需要的东西基本上需要等到有 K 个元素,然后将它们组合在一起。为了做到这一点,我有制片人:
insert item(s) into DB
insert a queue item into beanstalkd
和消费者:
while ( 1 ) {
beanstalkd.retrieve
if ( DB items >= K )
func_to_process_all_items
kill job
}
这与请求/处理的数量呈线性关系,但在以下情况下:
insert 1 item
... repeat many times ...
insert 1 item
假设所有这些插入发生在检索作业之前,这将添加 N 个队列项,它会执行以下操作:
check DB, process N items
check DB, no items
... many times ...
check DB, no items
有没有更聪明的方法来做到这一点,以便它不会不必要地插入/处理以后的作业请求?