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

  • 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