.. _spider_task_queue:

===============
Очередь заданий
===============

Приоритеты заданий
------------------

Все задания помещаются в очередь, откуда они ивзлекаются по мере освобождения сетевых ресурсов и выполняются. У каждого задания есть приоритет, обозначаемый положительным целым числом. Чем меньше это число, тем выше приоритет. Если приоритет не указан явно при создании задания, он назначается автоматически. Есть два алгоритма автоматического задания приоритетов:

:random: случайные приоритеты
:const: один и тот же приоритет для всех заданий.

По умолчанию используются случайные приоритеты. Способ выбора приоритетов задаётся аргументом `priority_mode` при создании Spider-объекта::
    
    bot = SomeSpider(priority_mode='const')

Бэкенды хранилищ
----------------

Очередь заданий в Grab выделена в отдельный слой, это позволяет писать реализации очереди для различных систем хранения данных. Из коробки доступны две реализации: хранение заданий в памяти и хранение заданий в mongodb. По умолчанию задания хранятся в памяти. Если объёма вашей памяти не хватает, чтобы хранить все задания, то рекомендуется использовать очередь в mongodb::

    bot = SomeSpider()
    bot.setup_queue() # очередь в памяти
    bot.setup_queue(backend='mongo', database='database-name') # очередь в монго

Генератор заданий
-----------------

Также для сокращения потребления памяти очередью заданий вы можете воспользоваться методом :ref:`spider_task_generator`, задания из которого будут браться только по мере опустошения очереди заданий.
