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

  • serg002
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Ну так ты же их никуда не сохранил, поэтому и быстрей. Ты же знаешь, что в зависимости от кейсов это можно сделать и гараздо быстрей и гараздо экономичней по потреблению памяти

    • Anoxemian
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Глядишь в книгу видишь хуй?

      random.randint(0, 2**32-1)
      
      int.from_bytes(random.randbytes(4))
      

      две абсолютно идентичные функции работают одна в 2 раза быстрее другой. Если еще анролл добавить, еще процентов 10-20 выжать можно. Но все равно очень медленно работает.

      • HolgerOP
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        да насрать придерживайся контекста

      • Anoxemian
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Добавил анролл и 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)
        
        121.65506488408731 Mbps
        4.013676881790161