Так как я искал еще некоторые всесторонние ответы, я решил исследовать проблему сам подробно. Сообщите мне, неправильно понял ли я что-нибудь.
Некоторая общая рекомендация должны использовать отдельный веб-сервер для обработки медиа. Отдельным я имею в виду веб-сервер, который не выполняет Django. Этот сервер может быть, например:
Затем для Django, можно спуститься по различным путям. Вы можете также:
Подача Django через [1 128] Apache и:
mod_python
Это - конюшня и рекомендовало/хорошо зарегистрированный путь. Недостатки: использование большая память.
mod_wsgi
Из того, что я понимаю, mod_wsgi, является более новой альтернативой. Это, кажется, быстрее и легче на ресурсах.
mod_fastcgi
При использовании FastCGI Вы делегируете обслуживание Django к другому процессу. Так как mod_python включает интерпретатор Python в каждый запрос, это использует большую память. Это - способ обойти ту проблему. Также существуют некоторые проблемы безопасности.
то, Что Вы делаете, - то, что Вы запускаете свой сервер Django FastCGI в отдельном процессе, и затем настраивает апача через перезаписи для вызова этого процесса при необходимости.
Или Вы можете:
Django Подачи, не используя Apache, но с другим сервером, который поддерживает FastCGI исходно:
(Документация упоминает, что можно сделать это, если у Вас нет Apache определенными потребностями. Я предполагаю, что причина должна состоять в том, чтобы сохранить память.)
Это - сервер, который выполняет YouTube. Это кажется быстрым и простым в использовании, однако я видел отчеты о memoryleaks.
я видел, что сравнительные тесты утверждают, что этот сервер еще быстрее, чем lighttpd. Это главным образом документируется в русский язык все же.
Другая вещь, из-за ограничений в Python Ваш сервер должен работать в разветвленном режиме, не поточном.
, Таким образом, это - мое текущее исследование, но я хочу больше мнений и событий.
Action и Func специально не извлекают или не ссылаются на параметры. Однако они всего лишь делегаты.
Вы можете создать собственный тип делегата, который принимает выходной параметр, и при этом использовать его.
Например, работает следующее:
class Program
{
static void OutFunc(out int a, out int b) { a = b = 0; }
public delegate void OutAction<T1,T2>(out T1 a, out T2 b);
static void Main(string[] args)
{
OutAction<int, int> action = OutFunc;
int a = 3, b = 5;
Console.WriteLine("{0}/{1}",a,b);
action(out a, out b);
Console.WriteLine("{0}/{1}", a, b);
Console.ReadKey();
}
}
Это распечатывает:
3/5
0/0
Нет, не со встроенными делегатами. out
и ref
являются специальными квалификаторами, и делегат должен быть настроен с ними явно, поскольку это совершенно разные стили вызова.
Однако, если вы определили своего собственного делегата, вы можете сделать это:
delegate void OutAction<T1, T2>(out T1 a, out T2 b);