J'ai eu aujourd'hui un pb qui m'inquiète un peu.
Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message
assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé
le message, mais c'était une memory error dans la ligne 303 de socket.py
data = self._sock.recv(recv_size)
Cette ligne fait partie d'une boucle while qui récupère un buffer
morceau par morceau en le mettant dans une liste 'buffers', puis recolle
le tout à la fin avec un "".join(buffers)
Après investigations gouguelesques infructueuses, recherche dans la
liste des fix de la dernière version de python 2.4 aussi sans résultat,
j'ai corrigé moi-même.
Le morceau de prog figure ci-après, mais en résumé, j'ai remplacé la
liste 'buffers' par une chaîne à laquelle j'ajoute les morceaux reçus
les uns après les autres par un bête '+' (les lignes remplacées sont en
commentaires).
C'est surement un peu moins rapide, mais ça marche.
Ai-je raté quelque chose ?
Quelqu'un a-t-il déjà rencontré un pb similaire ?
Je n'arrive pas à croire qu'un bête buffer de 7mo puisse poser problème,
et j'ai déjà eu beaucoup plus gros par ailleurs.
Je fais tout ça avec wXp et python 2.4.2.
Le bout de code:
buf_len = len(data)
if buf_len >= size:
self._rbuf = data[size:]
return data[:size]
#~ buffers = []
buffers2 = ''
if data:
#~ buffers.append(data)
buffers2= data
self._rbuf = ""
while True:
left = size - buf_len
recv_size = max(self._rbufsize, left)
data = self._sock.recv(recv_size)
if not data:
break
#~ buffers.append(data)
n = len(data)
if n >= left:
self._rbuf = data[left:]
#~ buffers[-1] = data[:left]
buffers2= buffers2+data[:left]
break
else:
buffers2= buffers2+data
buf_len += n
#~ return "".join(buffers)
return buffers2
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
hg
jean-michel bain-cornu wrote:
Bonsoir,
J'ai eu aujourd'hui un pb qui m'inquiète un peu. Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé le message, mais c'était une memory error dans la ligne 303 de socket.py data = self._sock.recv(recv_size) Cette ligne fait partie d'une boucle while qui récupère un buffer morceau par morceau en le mettant dans une liste 'buffers', puis recolle le tout à la fin avec un "".join(buffers)
Après investigations gouguelesques infructueuses, recherche dans la liste des fix de la dernière version de python 2.4 aussi sans résultat, j'ai corrigé moi-même. Le morceau de prog figure ci-après, mais en résumé, j'ai remplacé la liste 'buffers' par une chaîne à laquelle j'ajoute les morceaux reçus les uns après les autres par un bête '+' (les lignes remplacées sont en commentaires). C'est surement un peu moins rapide, mais ça marche.
Ai-je raté quelque chose ? Quelqu'un a-t-il déjà rencontré un pb similaire ?
Je n'arrive pas à croire qu'un bête buffer de 7mo puisse poser problème, et j'ai déjà eu beaucoup plus gros par ailleurs.
Je fais tout ça avec wXp et python 2.4.2.
Le bout de code: buf_len = len(data) if buf_len >= size: self._rbuf = data[size:] return data[:size] #~ buffers = [] buffers2 = '' if data: #~ buffers.append(data) buffers2= data self._rbuf = "" while True: left = size - buf_len recv_size = max(self._rbufsize, left) data = self._sock.recv(recv_size) if not data: break #~ buffers.append(data) n = len(data) if n >= left: self._rbuf = data[left:] #~ buffers[-1] = data[:left] buffers2= buffers2+data[:left] break else: buffers2= buffers2+data buf_len += n #~ return "".join(buffers) return buffers2
Par plantage tu veux dire exception ? ... si oui laquelle ?
jean-michel bain-cornu wrote:
Bonsoir,
J'ai eu aujourd'hui un pb qui m'inquiète un peu.
Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message
assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé
le message, mais c'était une memory error dans la ligne 303 de socket.py
data = self._sock.recv(recv_size)
Cette ligne fait partie d'une boucle while qui récupère un buffer
morceau par morceau en le mettant dans une liste 'buffers', puis recolle
le tout à la fin avec un "".join(buffers)
Après investigations gouguelesques infructueuses, recherche dans la
liste des fix de la dernière version de python 2.4 aussi sans résultat,
j'ai corrigé moi-même.
Le morceau de prog figure ci-après, mais en résumé, j'ai remplacé la
liste 'buffers' par une chaîne à laquelle j'ajoute les morceaux reçus
les uns après les autres par un bête '+' (les lignes remplacées sont en
commentaires).
C'est surement un peu moins rapide, mais ça marche.
Ai-je raté quelque chose ?
Quelqu'un a-t-il déjà rencontré un pb similaire ?
Je n'arrive pas à croire qu'un bête buffer de 7mo puisse poser problème,
et j'ai déjà eu beaucoup plus gros par ailleurs.
Je fais tout ça avec wXp et python 2.4.2.
Le bout de code:
buf_len = len(data)
if buf_len >= size:
self._rbuf = data[size:]
return data[:size]
#~ buffers = []
buffers2 = ''
if data:
#~ buffers.append(data)
buffers2= data
self._rbuf = ""
while True:
left = size - buf_len
recv_size = max(self._rbufsize, left)
data = self._sock.recv(recv_size)
if not data:
break
#~ buffers.append(data)
n = len(data)
if n >= left:
self._rbuf = data[left:]
#~ buffers[-1] = data[:left]
buffers2= buffers2+data[:left]
break
else:
buffers2= buffers2+data
buf_len += n
#~ return "".join(buffers)
return buffers2
Par plantage tu veux dire exception ? ... si oui laquelle ?
J'ai eu aujourd'hui un pb qui m'inquiète un peu. Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé le message, mais c'était une memory error dans la ligne 303 de socket.py data = self._sock.recv(recv_size) Cette ligne fait partie d'une boucle while qui récupère un buffer morceau par morceau en le mettant dans une liste 'buffers', puis recolle le tout à la fin avec un "".join(buffers)
Après investigations gouguelesques infructueuses, recherche dans la liste des fix de la dernière version de python 2.4 aussi sans résultat, j'ai corrigé moi-même. Le morceau de prog figure ci-après, mais en résumé, j'ai remplacé la liste 'buffers' par une chaîne à laquelle j'ajoute les morceaux reçus les uns après les autres par un bête '+' (les lignes remplacées sont en commentaires). C'est surement un peu moins rapide, mais ça marche.
Ai-je raté quelque chose ? Quelqu'un a-t-il déjà rencontré un pb similaire ?
Je n'arrive pas à croire qu'un bête buffer de 7mo puisse poser problème, et j'ai déjà eu beaucoup plus gros par ailleurs.
Je fais tout ça avec wXp et python 2.4.2.
Le bout de code: buf_len = len(data) if buf_len >= size: self._rbuf = data[size:] return data[:size] #~ buffers = [] buffers2 = '' if data: #~ buffers.append(data) buffers2= data self._rbuf = "" while True: left = size - buf_len recv_size = max(self._rbufsize, left) data = self._sock.recv(recv_size) if not data: break #~ buffers.append(data) n = len(data) if n >= left: self._rbuf = data[left:] #~ buffers[-1] = data[:left] buffers2= buffers2+data[:left] break else: buffers2= buffers2+data buf_len += n #~ return "".join(buffers) return buffers2
Par plantage tu veux dire exception ? ... si oui laquelle ?
jean-michel bain-cornu
Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé le message, mais c'était une memory error dans la ligne 303 de socket.py data = self._sock.recv(recv_size)
Par plantage tu veux dire exception ? ... si oui laquelle ?
Oui, pardon pour l'imprécision, il s'agit d'une exception memory error.
Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message
assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé
le message, mais c'était une memory error dans la ligne 303 de socket.py
data = self._sock.recv(recv_size)
Par plantage tu veux dire exception ? ... si oui laquelle ?
Oui, pardon pour l'imprécision, il s'agit d'une exception memory error.
Il s'agit d'un plantage dans imaplib lors d'un fetch sur un message assez gros (7mo) venant d'Exchange ; malheureusement je n'ai pas gardé le message, mais c'était une memory error dans la ligne 303 de socket.py data = self._sock.recv(recv_size)
Par plantage tu veux dire exception ? ... si oui laquelle ?
Oui, pardon pour l'imprécision, il s'agit d'une exception memory error.
hg
jean-michel bain-cornu wrote:
Je fais tout ça avec wXp et python 2.4.2.
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers et variés.
Il faudrait pouvoir effectivement reproduire le problème ... peut être l'exception et récupère les infos systèmes du moment ... hg
jean-michel bain-cornu wrote:
Je fais tout ça avec wXp et python 2.4.2.
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers
et variés.
Il faudrait pouvoir effectivement reproduire le problème ... peut être
l'exception et récupère les infos systèmes du moment ...
hg
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers et variés.
jean-michel bain-cornu
Bonjour,
Je fais tout ça avec wXp et python 2.4.2.
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers et variés.
Bon effectivement, ça ne le fait que sur mon PC de dev, qui n'est peut-être pas un modèle de stabilité. Donc comme j'ai un correctif, et que visiblement personne d'autre n'a le problème, je ne pousse pas plus loin pour le moment. A+ jm
Bonjour,
Je fais tout ça avec wXp et python 2.4.2.
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers
et variés.
Bon effectivement, ça ne le fait que sur mon PC de dev, qui n'est
peut-être pas un modèle de stabilité.
Donc comme j'ai un correctif, et que visiblement personne d'autre n'a le
problème, je ne pousse pas plus loin pour le moment.
A+
jm
Pour info, j'ai essayé aujourd'hui sur un serveur w2k3, et ça ne plante
pas. Le pb vient peut-être de mon PC, qui est très chargé en soft divers et variés.
Bon effectivement, ça ne le fait que sur mon PC de dev, qui n'est peut-être pas un modèle de stabilité. Donc comme j'ai un correctif, et que visiblement personne d'autre n'a le problème, je ne pousse pas plus loin pour le moment. A+ jm