• [^] # Re: Python ?

    Posté par (site web personnel) . En réponse au journal gcp: un outil de copie à la cp. Évalué à 1.

    Bon, je me lance ;)

    Sur un fichier de 2 GO, après plusieurs lancements pour être *presque* certain que les deux programmes exploitent de la même façon le cache du système, et en flushant le disque avant/après, bla bla,

    En essayant plusieurs taille de *buffer* (ici 16384 Ko), j'obtiens:


    time ./test /tmp/big_file /tmp/big_file2 16384
    ./test /tmp/big_file /tmp/big_file2 16384 0.00s user 1.79s system 14% cpu 12.357 total

    time python test.py /tmp/big_file /tmp/big_file3 16384
    python test.py /tmp/big_file /tmp/big_file3 16384 0.02s user 2.04s system 21% cpu 9.478 total


    Avantage python.

    Bon, ce benchmark n'a aucun intérêt, et des fois j'obtiens 11s pour le python et 10 pour le c ;)

    C:


    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char** argv)
    {
    char* file_in = argv[1];
    char* file_out = argv[2];
    size_t buffsize = atoi(argv[3]) * 1024;

    FILE* fr = fopen(file_in, "rb");
    FILE* fw = fopen(file_out, "wb");

    char *buffer = (char*) malloc(buffsize);

    while(1)
    {
    size_t read = fread(buffer, sizeof(char), buffsize, fr);

    if(read == 0)
    break;

    size_t writed = 0;
    while(writed < read)
    {
    writed += fwrite(buffer + writed, sizeof(char), read - writed, fw);
    }
    }

    free(buffer);
    fclose(fr);
    fclose(fw);

    }


    Python :


    import sys

    file_in, file_out = sys.argv[1:3]
    buffsize = int(sys.argv[3]) * 1024

    with open(file_in, 'rb') as fr:
    with open(file_out, 'wb') as fw:
    while True:
    data = fr.read(buffsize)
    if len(data) == 0:
    break
    fw.write(data)


    Bon, mon code C pue certainement... Compilé avec -march=native -Os -Wall

    Sinon, comment on met du code sans pourrir l'indentation sur linuxfr ?