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

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

    Лул, можно ускориться:

    #!/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)
    
    0.38315916061401367
    0.6362998485565186
    
    • 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