Я бы хотел использовать Django в качестве реле на другой слой. Когда пользователь делает запрос, клиент thrift вызывает функцию, которая обращается к другому программному обеспечению для получения результата.
Я понимаю потенциальные проблемы безопасности потоков, поэтому будет существовать пул объектов, основанный на многопроцессорности Python, и каждый пользовательский запрос будет выдавать один, использовать его и возвращать обратно.
Пул объектов должен быть инициализирован в начале программы и уничтожен (надеюсь, чисто) при выходе из программы (когда сервер прерывается с помощью SIGINT). Мотивация к этому вопросу состоит в том, чтобы знать, как сделать это правильно без взломов.
Единственный способ, который я нашел до сих пор, - это следующий прототип с глобальными переменными, учитывая, что ниже представлен файл представлений с представлениями на основе функций:
clients_pool = ClientsPool("127.0.0.1", 9090, size=64) # pool size
def get_data(request):
global clients_pool
c = clients_pool.pop() # borrow a client from the pool
res = c.get_data(request.body) # call the remote function with thrift
clients_pool.release(c) # restore client to the pool
return HttpResponse(res)
def get_something(request):
global clients_pool
c = clients_pool.pop() # borrow a client from the pool
res = c.get_something(request.body) # call the remote function with thrift
clients_pool.release(c) # restore client to the pool
return HttpResponse(res)
Это правильный способ сделать это? Или Django предлагает лучший механизм для этого?