если значения нулевые как мне надо то вроде можно использовать range хотя я не помню уже как. а если нужно заполнить случайными значениями типа random.randint. Количество значений примерно 16 миллионов. Не спрашивайте плз зачем мне это надо. Но надо. Как оптимизировать код чтобы выполнялось максимально быстро. А то если сделать чисто append в цикле то выполняется аж ~16 секунд пиздец как много.

import random def doAppend(size=16000000): result = [] for i in range(size): message = random.randint(1, 10) result.append(message) return result x = doAppend() print(len(x))out:
time ./project.py 16000000 real 0m2.849s user 0m2.821s sys 0m0.028s7900X
Но это самый тупой вариант и самый медленный
Лул, можно ускориться:
#!/usr/bin/python3 import random import time start_time = time.time() for x in range(1000000): val = int.from_bytes(random.randbytes(4)) print(time.time() - start_time) start_time = time.time() for x in range(1000000): val = random.randint(0, 2**32-1) print(time.time() - start_time)Ну так ты же их никуда не сохранил, поэтому и быстрей. Ты же знаешь, что в зависимости от кейсов это можно сделать и гараздо быстрей и гараздо экономичней по потреблению памяти
Глядишь в книгу видишь хуй?
random.randint(0, 2**32-1)int.from_bytes(random.randbytes(4))две абсолютно идентичные функции работают одна в 2 раза быстрее другой. Если еще анролл добавить, еще процентов 10-20 выжать можно. Но все равно очень медленно работает.
да насрать придерживайся контекста
Добавил анролл и 4 потока, выжал максимум:
#!/usr/bin/python3 import threading import random import time import gc gc.disable() start_time = time.time() result = [] def fasta(): for x in range (250000): bytes = random.randbytes(64) int_arr = [] for i in range(0, 64, 4): int_arr += [int.from_bytes(bytes[i:i+4])] result.extend(int_arr) threads = [] threads += [threading.Thread(target=fasta)] threads += [threading.Thread(target=fasta)] threads += [threading.Thread(target=fasta)] threads += [threading.Thread(target=fasta)] for t in threads: t.start() for t in threads: t.join() print(64000000/(time.time()-start_time)/1024/1024*8, "Mbps") print(time.time()-start_time)import numpy x = numpy.random.randint(1, 11, size=16000000).tolist()
Вот это дает скорость эквивалентную системной. Ожидаемо, сишечка зарешала, но накладные тормоза питухона конечно завораживают.
VPSки еще блять которые ты зачем то упоминал некстати.
Ты не знаешь что такое vps? В чем твоя проблема? О_о
дебил я не писал что это на сервере пусть виртуальном очки купи эрудит сраный
Дегенерат, я нашел у себя самый задристаный хост и он выдал результат в 40 раз быстрее твоей говнины. Предположив, что ты не на чайнике свою дрисню запускаешь, я тебе на этот факт указал. Ну каким дибилом надо быть, чтобы вместо того чтобы впитать - начать блевать. Пиздец, от этой хуйни охуеть можно. Кароч, впитывай, спасибо потом скажешь.
Ты тут дегенерат и уебок который перепутал двач и ЛТ. Мне плевать на твои хосты пошел нахуй сразу!
Оставайся дегенератом, хули тут.
так jit же не завезли, это получается все 16 миллионов каждый раз интерпретировать
Суть питухона - дернуть сишную функцию, которая сделает зашибись. Делать что-то низкоуровневое на самом пистоне, тем более дрочить байты как тут - это спецллимпиада уже.
Ну интересно просто стало, я в курсе, что питухон не быстр, но вот такого я не ожидал, конечно. Сливать на порядок просто на ровном месте, это круто. А как всякие джанги и прочий миллион софта на питухоне работают? А, главное, нахуя и зачем?
Они же байты не дрочат, там в сишные модули вынесено все что можно.