SyncConsumer isn't async - it runs inside a separate synchronous thread.
You'll need to get the event loop from the other thread and use
call_soon_threadsafe instead!

Andrew

On Wed, Aug 14, 2019 at 6:59 PM Dan Merillat <[email protected]> wrote:

>
> I have an application that's 99% using the ORM and database work so it is
> using SyncConsumer.
> However, I have one minor part that needs to use a timer, and I cannot get
> it to work for the life of me.
>
> In an AsyncConsumer, I can use asyncio.ensure_future(self.coroutine()) to
> start a timer.
>
> In sync consumer, nothing I've tried works:
>
> class TestConsumer(SyncConsumer):
>
>     async def timer_task(self):
>         print(f'timer task: {self.counter}')
>         asyncio.sleep(1)
>         self.counter += 1
>         print(f'timer expired: {self.counter}')
>
>     def connect(self):
>         self.counter = 0
>
>         self.timer = asyncio.ensure_future(self.timer_task())
>         # ERROR:daphne.server:Exception inside application: There is no
> current event loop in thread 'ThreadPoolExecutor-0_20'.
>
>         self.timer =
> async_to_sync(asyncio.ensure_future)(self.timer_task())
>         # ERROR:daphne.server:Exception inside application: You cannot use
> AsyncToSync in the same thread as an async event loop - just await the
> async function directly.
>
> I thought SyncConsumer was async under the hood, but I have no idea how to
> leverage that.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/6fe7ad95-1bdb-4de2-9ed2-8c566ba27939%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/6fe7ad95-1bdb-4de2-9ed2-8c566ba27939%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAFwN1uoGn%2B7C0hLFat%3DjMVgOKL2nYHAuae1i6mrC-JRW6W0uww%40mail.gmail.com.

Reply via email to