Самый быстрый способ чтения со стандартного ввода в Python для конкурентного программирования?Python

Программы на Python
Ответить
Anonymous
 Самый быстрый способ чтения со стандартного ввода в Python для конкурентного программирования?

Сообщение Anonymous »

Несколько дней назад я столкнулся с проблемой конкурентного программирования, которая никогда не решалась на Python. Это потому, что эта проблема имеет слишком большой объем входных данных, и Python, похоже, очень медленно читает со стандартного ввода (стандартный ввод). Ввод состоит из последовательности целых чисел, разделенных всего одним символом, который может быть либо пробелом (" "), либо разрывом строки ("\n").
Самый быстрый код чтения ввода, который мне удалось создать, приведен ниже. Он считывает весь двоичный ввод сразу, а затем объединяет эти наборы байтов для формирования целых чисел. И он предоставляет результат через итератор ввода (с использованием предложения yield). Зная, что цифры 0–9 имеют код ASCII 48–57, а в качестве разделителей целых чисел используются символы ниже этого диапазона, все, что нужно проверить, это проверить, равен ли байт >= 48.

Код: Выделить всё

from os import read
from os import fstat

def createInputIterator():
vs = 0
for v in read(0, fstat(0).st_size):
if v >= 48:
vs *= 10
vs += v - 48
else:
yield vs # another complete integer has been read
vs = 0

iterator = createInputIterator()

# numbers are consumed one by one like this:
# for i in range( ... ):
x = next(iterator)
Можно ли сделать этот код быстрее?
PS: Коду, который у меня есть, требуется всего лишь 5% повышения производительности, чтобы завершить задачу в течение ожидаемого периода времени в 2 секунды, и я измерил часть чтения ввода как узкое место (она потребляет более 50% времени выполнения).>

Подробнее здесь: https://stackoverflow.com/questions/778 ... rogramming
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»