Форум сайта python.su
-2
reclosedevВ decrypt происходит расшифровка алгоритмом, который есть в библиотеке, происходит вполне шустро (0,25 секунд в том же тесте).
А что происходит в decrypt? Есть возможность скинуть код?
Офлайн
173
Вот еще более быстрый вариант с array:
import array def reverse_with_array(data): a = array.array("L", data) a.byteswap() return a.tostring()
Отредактировано reclosedev (Май 28, 2012 23:15:43)
Офлайн
52
reclosedev, а вот это и правда быстро :) Но, насколько я понял, недостаточно.
Офлайн
-2
reclosedev, ну ты демон!
from timeit import Timer import os, array data = os.urandom(1024*1024) b2 = bytearray(data) def rev(): assert len(data) % 4 == 0, "Data length must be multiple of 4 but is %s" % len(data) l = [] i = iter(data) for x in range(len(data) // 4): l1 = [i.next(), i.next(), i.next(), i.next()] l1.reverse() l += l1 return "".join(l) def rev_fast(): b = b2 #assert len(b) % 4 == 0, "Data length must be multiple of 4 but is %s" % len(data) #b = bytearray(data) for x in xrange(0, len(data), 4): b[0+x], b[1+x], b[2+x], b[3+x] = b[3+x], b[2+x], b[1+x], b[0+x] return b def reverse_with_array(): a = array.array("L", data) a.byteswap() return a.tostring() print "1:", Timer(rev).timeit(10) print "2:", Timer(rev_fast).timeit(10) print "3:", Timer(reverse_with_array).timeit(10)
1: 6.54667590434
2: 3.62785130512
3: 0.0526457971614
Отредактировано asilyator (Май 28, 2012 23:28:17)
Офлайн
-2
Кроме модуля на си, мне приходит в голову еще:
- Cython. Что о нем думаете?
- Написание отдельной проги и вызов ее через exec, обмен будет через stdin/stdout. Виднузятникам в таком случае даем экзешник, линупсята сами сконпелируют.
Офлайн
173
fata1exПо тестам c
а вот это и правда быстроНо, насколько я понял, недостаточно.
MB = 200 DATA = "12345678" * ((MB*1024*1024)/(4*2))
Офлайн
-2
reclosedevУже упирается (см выше), но сишный вариант грузит проц меньше. Но такое, по крайней мере, уже можно распространять.
Думаю, теперь будет в диск упираться.
Отредактировано asilyator (Май 28, 2012 23:43:39)
Офлайн
173
asilyatorА, это которая PyCrypto? Да, затея не очень
Что значит поменять decrypt? Он из библиотеки Crypto, ты хочешь ее ускорить?
. Думал там можно как-то array передавать, но похоже она только строко-подобные принимает.asilyatorНаверное, возможность такая есть, нужно пробовать.
Данные берутся из файла и пишутся в файл, можно тут соптимизировать, например, читать сразу в массив?
import os import array def load_byteswapped_data(file, type_code="L"): a = array.array(type_code) file_size = os.fstat(file.fileno()).st_size a.fromfile(file, file_size/a.itemsize) a.byteswap() return a.tostring() def save_byteswapped_data(file, data, type_code="L"): a = array.array(type_code, data) a.byteswap() a.tofile(file) with open('data.dat', 'rb') as f: bs_data = load_byteswapped_data(f) # do something with byteswapped data # ... with open('data1.dat', 'wb') as f: save_byteswapped_data(f, bs_data)
Отредактировано reclosedev (Май 29, 2012 22:21:01)
Офлайн
-2
Можно и так, только там файл большой, надо читать его по кускам и не сначала.
Офлайн
0
def m1(data): return data[3::-1]+data[:3:-1]
Отредактировано DeFoR (Май 31, 2012 06:50:42)
Офлайн