Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

copie vers USB (rapidité)

16 réponses
Avatar
Laurent Claessens
Bonjour =E0 toutes et =E0 tous



J'ai des gigas =E0 copier depuis mon disque dur vers un disque
externe connect=E9 en USB. Et avant de copier, je dois v=E9rifier des
trucs pour savoir si je dois vraiment copier ou non.

Pour l'instant, la ligne de mon code python qui copie un r=E9pertoire

shutil.copytree(rep.chemin,rep.distant().chemin,1)

o=F9 sans surprise, rep.chemin d=E9signe le chemin du r=E9pertoire local et
rep.distant().chemin d=E9signe le chemin du r=E9pertoire vers lequel il
faut copier.

Pas que ce code ne marche pas, mais disons que le taux de transf=E8re
est inf=E9rieur =E0 2Mo par secondes, alors que je si copie =E0 la souris
dans konqueror (par exemple), j'ai entre 5 et 5 Mo par secondes.
Est-ce que quelqu'un sait comment on peut obtenir des taux de
transf=E8re =E9lev=E9s avec python ?

Merci
bonne soir=E9e
Laurent

6 réponses

1 2
Avatar
Laurent Pointal
Peut-être reprendre le code, et l'améliorer (taille de buffers)...


Pas sûr que ça change grand chose. Il y a l'OS derrière qui a ses
propres buffers...


Oui, mais entre lire et écrire des blocs de 1K et des blocs de 1M, je ne
suis pas sûr que l'OS puisse faire les mêmes optimisations sur la
gestion de ses buffers.

En plus, en utilisant directement les fonctions bas niveau type
os.open(), on peut spécifier certaines options, du genre O_NONBLOCK /
O_NDELAY...

Bref, faut tester.


http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/open.2.html


Avatar
jean-michel bain-cornu
Peut-être reprendre le code, et l'améliorer (taille de buffers)...


Pas sûr que ça change grand chose. Il y a l'OS derrière qui a ses
propres buffers...


Oui, mais entre lire et écrire des blocs de 1K et des blocs de 1M, je ne
suis pas sûr que l'OS puisse faire les mêmes optimisations sur la
gestion de ses buffers.

En plus, en utilisant directement les fonctions bas niveau type
os.open(), on peut spécifier certaines options, du genre O_NONBLOCK /
O_NDELAY...

Bref, faut tester.

Ce n'est pas une mauvaise idée. Sais-tu si la compil de python est

facile sous linux ? Je ferai quelques tests dans la semaine, et si ça
donne quelque chose, je mettrai un post.



Avatar
jean-michel bain-cornu
Pourquoi en serait-il autrement ?
La question était idiote, il est vrai ; mais sait-on jamais...

Perso, je le compile comme ça :

./configure --enable-shared && make && make install.

Mes 2 cts.

Tu as compté la csg ?


Avatar
Laurent Pointal
Peut-être reprendre le code, et l'améliorer (taille de buffers)...


Pas sûr que ça change grand chose. Il y a l'OS derrière qui a ses
propres buffers...


Oui, mais entre lire et écrire des blocs de 1K et des blocs de 1M, je
ne suis pas sûr que l'OS puisse faire les mêmes optimisations sur la
gestion de ses buffers.

En plus, en utilisant directement les fonctions bas niveau type
os.open(), on peut spécifier certaines options, du genre O_NONBLOCK /
O_NDELAY...

Bref, faut tester.

Ce n'est pas une mauvaise idée. Sais-tu si la compil de python est

facile sous linux ? Je ferai quelques tests dans la semaine, et si ça
donne quelque chose, je mettrai un post.


Pourquoi veux-tu recompiler ?

os.open() et les options indiquées sont dispos en standard.

(note au cas où: après il faut utiliser les fonctions de
lecture/écriture du module os, pas les méthodes sur les fichiers!)




Avatar
jean-michel bain-cornu
En plus, en utilisant directement les fonctions bas niveau type
os.open(), on peut spécifier certaines options, du genre O_NONBLOCK /
O_NDELAY...

Bref, faut tester.

Ce n'est pas une mauvaise idée. Sais-tu si la compil de python est

facile sous linux ? Je ferai quelques tests dans la semaine, et si ça
donne quelque chose, je mettrai un post.


Pourquoi veux-tu recompiler ?
Pas examiné assez bien les post. J'avais en tête une intervention sur

les sources C sans penser qu'une partie plus qu'appréciable est en
python lui-même.

os.open() et les options indiquées sont dispos en standard.

(note au cas où: après il faut utiliser les fonctions de
lecture/écriture du module os, pas les méthodes sur les fichiers!)

J'ai trouvé sans pb la fonction copyfile(src, dst) dans shutil.py, qui

fait deux open avec 'rb' et 'wb', mais quid de l'open lui-même ? Et je
ne vois pas non plus ces fonctions de lecture/écriture du module os...



Avatar
Laurent Pointal

J'ai trouvé sans pb la fonction copyfile(src, dst) dans shutil.py, qui
fait deux open avec 'rb' et 'wb', mais quid de l'open lui-même ? Et je
ne vois pas non plus ces fonctions de lecture/écriture du module os...


Elles sont directement dans l'espace de noms du module os:

Cf http://docs.python.org/lib/os-fd-ops.html


os.open(file, flags[, mode])
os.close(fd)
os.write(fd, str)
os.read(fd, n)

Et les options de flag pour open sont aussi dans os.

Attention: pas de import * sur os, sinon tu écrase le open builtin par
le open d'os, et ils ont des valeurs de retour différentes (os.open()
retourne un int file descriptor).

1 2