Существует много теории при тестировании случайности. Для очень простого теста на алгоритме перестановки карты Вы могли сделать много перестановок и затем работать, хи придала тесту квадратную форму, что вероятность каждой карты, поднимающейся в любом положении, была универсальна. Но это не тестирует это, последовательные карты не коррелируются так, Вы также хотели бы сделать тесты на этом.
Объем 2 из Искусства Knuth Программирования дают много тестов, которые Вы могли использовать в разделах 3.3.2 (Эмпирические тесты) и 3.3.4 (Спектральный Тест) и теория позади них.
Взгляните на пакет WebOb . Он предоставляет функциональные возможности, позволяющие указать, что wsgi.input должен быть доступен для поиска. Это позволяет вам перематывать входной поток, чтобы контент можно было воспроизвести с помощью другого обработчика. Даже если вы не используете WebOb, то, как он это делает, должно быть поучительным, так как можно было бы поверить, что Ян сделал это надлежащим образом. Результаты поиска в документации см. здесь .
Вы можете попробовать поместить файловую реплику потока обратно в среду:
from cStringIO import StringIO
length = int(environ.get('CONTENT_LENGTH', '0'))
body = StringIO(environ['wsgi.input'].read(length))
environ['wsgi.input'] = body
Необходимость в этом - немного неприятный запах. В идеале только один фрагмент кода должен анализировать строку запроса и тело сообщения и доставлять результаты другим компонентам.
Если вы собираетесь прочитать его одним махом, вы всегда можете прочитать его, создать файл-подобный объект CStringIO для материала, который вы прочитали, а затем назначить его обратно, например это:
import cStringIO
import copy
lines = []
for line in environ['wsgi.input']:
lines.append(line)
newlines = copy.copy(lines)
environ['wsgi.input'] = cStringIO.StringIO(''.join(newlines))
Скорее всего, есть более эффективный способ сделать это, но в целом я нахожу сообщения wsgi довольно хрупкими, если вы хотите сделать что-нибудь нетривиальное (например, прочитать многократное повторение данных сообщения) ...