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

  • serg002
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago
    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.028s
    

    7900X

    Но это самый тупой вариант и самый медленный

    • 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
            
    • TheAnonymous
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      import numpy x = numpy.random.randint(1, 11, size=16000000).tolist()

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

        Вот это дает скорость эквивалентную системной. Ожидаемо, сишечка зарешала, но накладные тормоза питухона конечно завораживают.

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

          VPSки еще блять которые ты зачем то упоминал некстати.

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

            Ты не знаешь что такое vps? В чем твоя проблема? О_о

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

              дебил я не писал что это на сервере пусть виртуальном очки купи эрудит сраный

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

                Дегенерат, я нашел у себя самый задристаный хост и он выдал результат в 40 раз быстрее твоей говнины. Предположив, что ты не на чайнике свою дрисню запускаешь, я тебе на этот факт указал. Ну каким дибилом надо быть, чтобы вместо того чтобы впитать - начать блевать. Пиздец, от этой хуйни охуеть можно. Кароч, впитывай, спасибо потом скажешь.

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

                  Ты тут дегенерат и уебок который перепутал двач и ЛТ. Мне плевать на твои хосты пошел нахуй сразу!

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

                    Оставайся дегенератом, хули тут.

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

          так jit же не завезли, это получается все 16 миллионов каждый раз интерпретировать

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

          Суть питухона - дернуть сишную функцию, которая сделает зашибись. Делать что-то низкоуровневое на самом пистоне, тем более дрочить байты как тут - это спецллимпиада уже.

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

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

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

              Они же байты не дрочат, там в сишные модули вынесено все что можно.