“BlockingIOError: [Errno 11] Resource temporarily unavailable” pour Python 3.6 6
mardi 28 février 2017 à 10:39La toute première version de Python 3.6 avait un bug assez vicieux qui ne se manifestait que sous certaines conditions, généralement dans un daemon sur un serveur, et en important certains modules qui finissent par déclencher par réaction en chaîne l’usage de random
.
django
est concerné.
On tombait dessus généralement assez tard, à la mise en prod, avec un message cryptique:
BlockingIOError: [Errno 11] Resource temporarily unavailable The above exception was the direct cause of the following exception: Traceback (most recent call last): .... <- des imports de votre code qui ne font rien de mal File "/usr/local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 36, inimport email.parser File "/usr/local/lib/python3.6/email/parser.py", line 12, in from email.feedparser import FeedParser, BytesFeedParser File "/usr/local/lib/python3.6/email/feedparser.py", line 27, in from email._policybase import compat32 File "/usr/local/lib/python3.6/email/_policybase.py", line 9, in from email.utils import _has_surrogates File "/usr/local/lib/python3.6/email/utils.py", line 28, in import random File "/usr/local/lib/python3.6/random.py", line 742, in _inst = Random() SystemError: returned a result with an error set
Cela a été corrigé rapidement, et le binaire patché ajoute juste un “+” à sa version:
$ python --version
Python 3.6.0+ |
En théorie vous ne pouvez pas tomber dessus, tous les liens de téléchargement ont été mis à jour, les distributions ont changé leurs dépôts, etc.
Mais hier je me suis fait bien niqué, et j’ai perdu 1h à debugguer cette surprise qui n’avait aucun sens (puisque mon code allait bien) : les bugs dans les binaires officiels sont rares et c’est le dernier endroit où je cherche.
En effet, certaines sources non-officielles pour installer Python n’ont pas été mises à jour, et c’est le cas du très populaire PPA deadsnakes
.
Si vous avez installé Python 3.6 en faisant :
sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python3.6 |
vous l’avez dans le cul.
Il existe un PPA plus à jour si vous avez besoin de corriger le tir :
sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6 |
Donc si vous avez compilé Python à la main ou utilisé un PPA, assurez-vous bien d’avoir la bonne version, et sinon upgradez. En attendant j’ai un bug report à faire à deadsnakes
…