Имхо, тут никакая многопоточность не нужна (так сложнее будет ограничеть общее число запросов на экспорт)
Я вижу тут 2 пути решения проблемы:
1. сразу отправлять задачи на сервер очередей и по необходимости ограничивать для конкретного пользователя кол-во экспортированных продуктов, а на излишки создавать новую задачу(задачи) с дилеем 5 минут.
2. имхо, вариант получше, создать таблицу в SQL БД, либо ключ в Redis, с очередью экспорта, куда можно помещать заказы пользователя и удалять обработанные заказы. Проверять данную очередь и ограничения на конкретного пользователя можно по крону раз в минуту, например. Притом проверять, желательно, сразу же при выборке задач, которые необходимо выполнить. Но тогда будет задержка в экспорте максимум в эту же минуту.