Если я отправлю объект функции "Сигнал" python из функции, что должно быть аргументом "отправителя"?

Если я посылаю сигнал из функции модуля (функция просмотра django, как это бывает), это не внутри класса, это не очевидно (для меня), что должен быть отправителем - если что-нибудь? Соответствует ли sender=None в этом случае?

В качестве альтернативы, эта функция вызывается HTTP-запросом, который я сейчас передаю в качестве отдельного аргумента - должен ли я передать это вместо?

Вариант A:

from django.dispatch import Signal
my_signal = Signal(
    providing_args=['my_arg', 'request']
)    

# this is a view function
def do_something(request):
    # ... do useful stuff
    my_signal.send(
        sender=None,
        my_arg="Hello",
        request=request
    )

Вариант B:

from django.dispatch import Signal
my_signal = Signal(
    providing_args=['my_arg']
)    

# this is a view function
def do_something(request):
    # ... do useful stuff
    my_signal.send(
        sender=request,
        my_arg="Hello",
    )

[ОБНОВЛЕНИЕ]

Вариант A имеет его. Там ничего полезного, что получатель может сделать с отправителем в этом случае (т.е. Это не объект), поэтому установите его в None.

Ответы

Ответ 1

django.dispatch.Dispatcher источник просто говорит, что он должен быть

"...[t]he sender of the signal. Either a specific object or None."

который затем соединяется с приемником через connect(), для которого значение отправителя:

"The sender to which the receiver should respond. Must either be
 of type Signal, or None to receive events from any sender"

который, я признаю, не особенно ясен, но в вашем случае я бы сказал, чтобы использовать sender=None, потому что нет ничего конкретного, к которому нужно подключиться, поскольку запрос является временным.