Найти - Пользователи
Полная версия: WSGI, где многопоточность???
Начало » Web » WSGI, где многопоточность???
1 2 3 4
o7412369815963
вот значит набросал такой семпл.
# coding: utf-8

import time

def application(environ, start_response):
status = '200 OK'
output = str(time.time())
time.sleep(5)
output += '<br/>' + str(time.time())

response_headers = [('Content-type', 'text/html; charset=utf-8'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)

return [output]
виртуалХост на апаче
<VirtualHost *:80>
ServerName localhost

WSGIDaemonProcess main user=www-data group=www-data processes=1 threads=5
#WSGIDaemonProcess main user=www-data group=www-data processes=5
WSGIScriptAlias / /var/www/main/main.wsgi

<Directory /var/www/main>
WSGIProcessGroup main
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>

ErrorLog /var/log/apache2/main_error_log
CustomLog /var/log/apache2/main_log common
</VirtualHost>
при одновременном подключении клиентов, запросы обрабатываются последовательно. кто знает почему многопоточности нет???
Lexander
Запусти апач с опцией -V и посмотри значение Server MPM.
Должно быть что-то типа
Server MPM:     Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Ну и настройки
StartServers
ServerLimit
плюс
wsgi.multithread
wsgi.multiprocess
Я точно не помню, перебивают ли последние 2 настройки значения processes, threads.
o7412369815963
Lexander
Запусти апач с опцией -V и посмотри значение Server MPM.
Должно быть что-то типа
Server MPM:     Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Ну и настройки
StartServers
ServerLimit
плюс
wsgi.multithread
wsgi.multiprocess
Я точно не помню, перебивают ли последние 2 настройки значения processes, threads.
это есть в конфиге апача
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
>плюс
wsgi.multithread
wsgi.multiprocess
это куда прописывать?
помоему это не настройки а показатели которые зависят от “processes=1 threads=25”
o7412369815963
$ apache2 -V
Server version: Apache/2.2.14 (Ubuntu)
Server built: Apr 13 2010 19:29:28
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 32-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/worker"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
o7412369815963
вообщем по настройкам вроде все норм. куда копать дальше?
o7412369815963
вот что прилетает приложению wsgi в environ
mod_wsgi.application_group=, 
mod_wsgi.callable_object=application,
mod_wsgi.listener_host=,
mod_wsgi.listener_port=80,
mod_wsgi.process_group=main,
mod_wsgi.reload_mechanism=1,
mod_wsgi.script_reloading=1,
mod_wsgi.version=(2, 8),
wsgi.errors=,
wsgi.file_wrapper=,
wsgi.input=,
wsgi.multiprocess=True,
wsgi.multithread=True,
wsgi.run_once=False,
wsgi.url_scheme=http,
wsgi.version=(1, 0)
Lexander
o7412369815963
это есть в конфиге апача…
Учитывая режим работы Worker, эта секция не имеет отношения к настройке твоего текущего режима работы апача.

o7412369815963
помоему это не настройки а показатели которые зависят от “processes=1 threads=25”
Вот эта штука:
WSGIDaemonProcess main user=www-data group=www-data processes=1 threads=5
перебивает настройку окружения
wsgi.multiprocess
wsgi.multithread

Банально увеличить processes пробовал? Глупый вопрос, я знаю, просто хочу быть уверенным :)
Явное указание processes=1 (именно 1) используется с другими настройками wsgi - когда есть несколько групп (а у тебя одна - main) и мультипоточность организовывают с их помощью.

Кстати, еще один глупый вопрос: что ты подразумеваешь под многопоточностью (processes, threads)?
Что ты хочешь, чтобы апач создавал при новом подключении?

Кроме того,
Добавь maximum-requests=5 (ну или сколько пожелаешь) к WSGIDaemonProcess для полноты картины.
И закоментируй пока WSGIApplicationGroup %{GLOBAL}.
o7412369815963
Lexander
o7412369815963
помоему это не настройки а показатели которые зависят от “processes=1 threads=25”
Вот эта штука:
WSGIDaemonProcess main user=www-data group=www-data processes=1 threads=5
перебивает настройку окружения
wsgi.multiprocess
wsgi.multithread
я про это же и сказал

>Банально увеличить processes пробовал? Глупый вопрос, я знаю, просто хочу быть уверенным :)
пробовал, ставил и 5 и 15

> Кроме того, Добавь maximum-requests=5 (ну или сколько пожелаешь) к WSGIDaemonProcess для полноты картины.
готово, не помогло

>Кстати, еще один глупый вопрос: что ты подразумеваешь под многопоточностью (processes, threads)? Что ты хочешь, чтобы апач создавал при новом подключении?
я хочу что-б ответы клиентам формировались параллельно и вообще так должны работать все сервера так то. а сейчас один законектился на 10сек, второй клиент пришел - ждет пока первый выйдет.

задал этот же вопрос на забугорных форумах - молчат.

а пока у mog_wsgi статус - однопоточный. т.к. все сделал по документации. :(
o7412369815963
получается все фреймворки которые подключены через mod_wsgi: Django, TurboGears, Pylons и др. - работают в однопоточном режиме.
Александр Кошелев
o7412369815963
получается все фреймворки которые подключены через mod_wsgi: Django, TurboGears, Pylons и др. - работают в однопоточном режиме.
Нет.

Вы так и не привели настройки mpm апача и не написали как вы тестировали.

Пока очевидно, что вы не понимаете что вы хотете сделать и как apache+mod_wsgi работают в принципе.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB