Koed00 / django-q

A multiprocessing distributed task queue for Django
https://django-q.readthedocs.org
MIT License
1.83k stars 285 forks source link

Calling `async_task` from an async function #725

Open Alain1405 opened 1 year ago

Alain1405 commented 1 year ago

I use Django Channels to manage websockets. I have configured Django-Q to use Django ORM as a broker.

In the WS message handler I store some data in DB, then I want to perform some async tasks, here is some sample code

async def receive(self, text_data):
  logging.debug(f"Received WS message: {text_data}")

  new_answer = Answer(
      answer=answer,
      ...
  )
  await new_answer.asave()
  async_task(add_answer_to_vectorstore, new_answer.id)

On the async_task call I get You cannot call this from an async context - use a thread or sync_to_async.. I could not find any instance of such error for Django-Q but I suspect it's because of using Django ORM as a broker (model.save() cannot be call within an async context, we should use .asave as in my code). Has anyone else stumbled upon this? Any solution?

Alain1405 commented 1 year ago

Additional info:

scottpashley commented 1 year ago

Hi @Alain1405 - you might be more likely to get a response from https://github.com/django-q2/django-q2 which is an active fork of this project