Я использую Perl-клиент beanstalkd. Мне нужен простой способ не ставить в очередь одну и ту же работу дважды.
Мне нужно что-то, что должно в основном ждать, пока не появятся элементы 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
Есть ли более разумный способ сделать это, чтобы он не вставлял / не обрабатывал последующие запросы на работу без необходимости?