@ staticmethod в django не работает.Статический метод должен выполняться только один.Однако для тестирования я сделал 3 вызова параллельно, а статический метод был вызван 3 раза.Ниже приведены код и выход:
Код:
class KafkaReceiver:
_kafka_consumer = None
def __init__(self, topic):
KafkaReceiver._kafka_consumer = self.create_only_one_consumer()
@staticmethod
def create_only_one_consumer():
if KafkaReceiver._kafka_consumer is None:
KafkaReceiver._kafka_consumer = KafkaConsumer(KafkaReceiver._topic)
print("Consumer Created......")
return KafkaReceiver._kafka_consumer
Выход:
Consumer Created......
Consumer Created......
Consumer Created......
Код параллельного вызова:
r1 = grequests.get('http://localhost:5014/message/?message=hello', callback=do_something)#, hooks = {'response' : do_something})
r2 = grequests.get('http://localhost:5014/message/?message=helloworld', callback=do_something)#, hooks = {'response' : do_something})
r3 = grequests.get('http://localhost:5014/message/?message=hellothere', callback=do_something)#, hooks = {'response' : do_something})
grequests.map([r1, r2, r3])
Что ожидается: Для каждого вызова веб-службы django, django создает (я думаю) новый поток.Тем не менее, класс здесь не должен создавать экземпляр потребителя.Это проблема блокировки (я пробовал lock и RLock, она не работает с django)
Вторая странная вещь - при дальнейших вызовах django этот статический метод не выполняется.