Sinais assíncronos com asyncio

O pós-processamento do meu modelo está usando opost_save sinal:

from django.core.signals import request_finished
from django.dispatch import receiver
from models import MyModel
from pipeline import this_takes_forever


@receiver(post_save, sender=MyModel)
def my_callback(sender, **kwargs):
    this_takes_forever(sender)

othis_takes_forever A rotina faz E / S, portanto, quero adiá-la para evitar o bloqueio excessivo da solicitação.

Eu pensei que este era um ótimo caso de uso para o novoassíncio módulo. Mas tenho dificuldade em entender o processo todo.

Eu acho que deveria ser capaz de adaptar o receptor de sinal assim:

@receiver(post_save, sender=MyModel)
def my_callback(sender, **kwargs):
    loop = asyncio.get_event_loop()
    loop.run_until_complete(this_takes_forever(sender))
    loop.close()

Forneceuthis_takes_forever também é adaptado para ser uma rotina.

@coroutine
def this_takes_forever(instance):
    # do something with instance
    return instance

Isso parece mágico demais para funcionar. E, de fato, ele pára com umAssertionError:

AssertionError at /new/
There is no current event loop in thread 'Thread-1'.

Não vejo por onde devo iniciar o loop neste contexto. Alguém tentou algo assim?

questionAnswers(1)

yourAnswerToTheQuestion