Проблема с загрузкой файла web.py + mod_wsgi - PullRequest
0 голосов
/ 08 февраля 2011

Я работаю над приложением web.py для загрузки файлов, и у меня возникли реальные проблемы с моим развертыванием.По сути, я хочу дать пользователю «процент загрузки», но при развертывании на mod_wsgi кажется, что это сильно портит работу.Основная загрузка работает следующим образом:

out = open(path, 'wb', 1000)

    while (True):

        packet = fileU.file.read(1000)

        if not packet:

            break

        else:

            out.write(packet)
            sessions[code].progress += 1

    out.close()

'Session' - это глобальный словарь, содержащий объекты, которые отслеживают сеансы.Чтобы получить текущий прогресс, я получаю текущий прогресс для данного сеанса через GET-запрос от клиента каждую секунду.

Проблема на данный момент в том, что это работает только для небольших загрузок.Кажется, что-нибудь более 100 КБ просто не будет увеличивать переменную прогресса.Значение определенно увеличивается, если поместить его вне цикла (или перед вызовом read ()) или если файл довольно маленький.

Возможно ли, что wsgi открывает новые потоки для больших файлов и поэтому делаетмой глобальный счетчик только локальный для темы загрузки?Может ли это быть что-то еще.

1 Ответ

2 голосов
/ 08 февраля 2011

Вы не можете просто использовать глобальный словарь для этого. На самом деле весьма вероятно, что веб-сервер использует отдельный поток для обслуживания следующих запросов, и нет никакой гарантии, что словарь сеанса такой же. Попробуйте использовать объект сеанса, который является частью web.py. Он использует базу данных или файл для хранения данных, к которым могут обращаться различные потоки или процессы.

пример сеанса web.py

...