Celery - Какой пул я должен использовать для тяжелого процесса cpu в windows и бэкенда redis для отслеживания состояния?

Я использую python 3.9, Windows 10, celery 4.3, redis в качестве бэкенда и aws sqs в качестве брокера (я не собирался использовать бэкенд, но мне становилось все более очевидным, что из-за ограничений библиотеки на windows мне лучше использовать его, если я смогу заставить его работать, иначе я бы просто использовал redis в качестве брокера и бэкенда).

Чтобы дать вам некоторый контекст, у меня есть веб-страница, с которой взаимодействует пользователь, чтобы позволить ему выполнить ресурсоемкую задачу. Если у пользователя запущена задача и он решает повторно отправить ее, мне нужно, чтобы он убил задачу и использовал новую информацию, отправленную пользователем, для создания новой задачи.

Проблема для меня возникает после такой линии размышлений:

Me: "Hmmm, the prefork pool is used for heavy cpu background tasks... I want to use that..."
Me: Goes and configures settings.py,
  updates the celery library,
  sets the environment variable to allow windows to run prefork pool -
    os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1'),
  sets a few other configuration settings, etc,
  runs the worker and it works.
Me: "Hey, hey. It works... Oh, I still can't revoke a task DESPITE RUNNING THE PREFORK POOL!?!?!
Oh, that's okay... I can just set a session variable to let me know if the user already started a task,
and if they have, just have celery tell me if the task that they started is finished
before I allow the user to request to run a task again."

Me: Goes and configures django sessions,
configures redis,
updates the views to include the session variable, etc,

Me: "Great! Everything is working, so far..."

Me: Runs a test to see if the redis server returns the status...
Celery: "PENDING"
Me: "Yo! Is my task done, yet!?"
Celery: "No - PENDING"
Celery: "PENDING"
Celery: "PENDING"
Celery: "PENDING"
Celery: "PENDING"
Celery: "PENDING"

Me: Searches stackoverflow for why its only pending...
Me: Finds out that you must use --pool=solo for the worker...
Me: Dies on the inside.

Идеально - я бы хотел иметь возможность использовать пул prefork для интенсивной обработки и при необходимости завершать задачу. Дело в том, что все, что я читаю, говорит мне, что prefork - это то, что мне нужно, но solo - это единственный способ, который я могу придумать, чтобы заставить его работать.

Вопросы:

Насколько плохо для меня поступиться этими желаниями и просто пойти на соло, ожидая, что я буду использовать тяжелый процессор для задач и много пользователей? Предположительно 100s, если не 1000s.

Какие другие решения мне следует рассмотреть?

По моему опыту на windows я не могу использовать ничего кроме --pool=solo

Какие другие решения мне следует рассмотреть?

Как я это делаю, я использую 1 пул для разработки под windows и больше на производстве (linux), по крайней мере, в моем случае использование одиночного пула для разработки - это нормально.

Вернуться на верх