У нас есть приложение Django, которое должно отправлять сообщения и загружать файлы с веб-сервера на другой сервер через XML API. Нам нужно выполнить X асинхронную загрузку файлов, а затем сделать еще один запрос XML API, когда они завершат загрузку. Я также хотел бы, чтобы файлы передавались с диска без предварительной загрузки их в память. Наконец, мне нужно отправить файлы в виде application / octet-stream в теле POST (а не в более типичном MIME-типе данных формы), и я не смог найти способ сделать это с помощью urllib2 или httplib.
В итоге я интегрировал Twisted в приложение. Это казалось идеальным решением для этой задачи, и, конечно же, я смог написать красиво чистую реализацию с отложенными для каждой загрузки. Я использую свой собственный IBaseProducer для чтения данных из файла порциями и отправки их на сервер в теле запроса POST. К сожалению, тогда я обнаружил, что реактор Twister не может быть перезапущен, поэтому я не могу просто запустить его, а затем остановить, когда захочу загрузить файлы. Поскольку Twisted, по-видимому, чаще используется для полноценных серверов, мне интересно, был ли это правильный выбор.
Я не уверен, должен ли я:
a) Настройте контейнер WSGI (в настоящее время я тестирую с manage.py) для запуска Twisted потока при запуске и используйте blockingCallFromThread для запуска загрузки моего файла.
б) Используйте Twisted в качестве контейнера WSGI для приложения Django. Я предполагаю, что мы захотим позже развернуть Apache, и я не уверен, каковы будут последствия, если мы пойдем по этому пути.
в) Просто можете Twisted и использовать какой-то другой подход для загрузки файлов. Какой-то позор, поскольку Twisted-подход с отсрочкой элегантен и работает.
Какой из них мы должны выбрать, или есть какая-то другая альтернатива?