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

  • 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