<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title># rm-rf.es &#187; Python</title>
	<atom:link href="http://rm-rf.es/categoria/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://rm-rf.es</link>
	<description>Administración de sistemas, Unix, Linux, FreeBSD, Windows, hosting, dominios, servidores...</description>
	<lastBuildDate>Fri, 18 May 2012 21:00:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>[error] (28)No space left on device: mod_python: Failed to create global mutex</title>
		<link>http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/</link>
		<comments>http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 06:59:11 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1828</guid>
		<description><![CDATA[Ayer en un servidor Apache con mod_python me encontré con este error: [Thu Jun 02 21:43:19 2011] [error] (28)No space left on device: mod_python: Failed to create global mutex 1 of 4 (/tmp/mpmtx280211). Configuration Failed Lo primero que hice por lógica fue mirar lo siguiente: Mirar que el disco tuviera espacio libre (df -h). Mirar [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer en un servidor Apache con mod_python me encontré con este error:</p>
<p><strong><em>[Thu Jun 02 21:43:19 2011] [error] (28)No space left on device: mod_python: Failed to create global mutex 1 of 4 (/tmp/mpmtx280211).<br />
Configuration Failed<br />
</em></strong></p>
<p>Lo primero que hice por lógica fue mirar lo siguiente:</p>
<ol>
<li>Mirar que el disco tuviera espacio libre (<em>df -h</em>).</li>
<li>Mirar que el disco no estuviera al 100% en inodos (<em>df -i</em>).</li>
<li>Mirar que ningún log de Apache hubiera llegado a los 2.0GB de tamaño.</li>
</ol>
<p>Ninguna de las tres cosas era cierta y seguía teniendo el problema. Hace ya un par de años tuve un problema similar en Apache y estaba relacionado con los semáforos del Kernel:<a title="Apache: Semget: No space left on device" href="http://rm-rf.es/apache-semget-no-space-left-on-device/"> Apache: Semget: No space left on device</a>. Esa vez la solución que ofrecía era vaciar el array de semáforos. En este caso vamos  <a href="http://www.eth0.us/python-mutex" target="_blank">solucionarlo</a> de otro modo, <strong>ampliando los valores de Kernel para los semáforos</strong>. Actualmente tenía los siguientes:</p>
<pre># cat /proc/sys/kernel/sem
250	32000	32	128</pre>
<p>Los ampliamos y reiniciamos Apache:</p>
<pre># echo "kernel.sem = 512 32000 100 512" &gt;&gt; /etc/sysctl.conf
# sysctl -p
# /etc/init.d/httpd restart</pre>
<p>&nbsp;</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/instalar-y-utilizar-apache-jmeter-sin-gui/" title="Instalar y utilizar Apache JMeter sin GUI">Instalar y utilizar Apache JMeter sin GUI</a></li><li><a href="http://rm-rf.es/apache-permitir-acceso-a-un-directorio-con-autenticacion-para-una-ip-cidr/" title="Apache: permitir acceso a un directorio con autenticación para una IP / CIDR">Apache: permitir acceso a un directorio con autenticación para una IP / CIDR</a></li><li><a href="http://rm-rf.es/sslcertificatefile-file-certificado-crt-does-not-exist-or-empty/" title="SSLCertificateFile: file certificado.crt does not exist or empty">SSLCertificateFile: file certificado.crt does not exist or empty</a></li><li><a href="http://rm-rf.es/reverseproxy-en-apache-con-ssl/" title="ReverseProxy en Apache con SSL">ReverseProxy en Apache con SSL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servidor web en Python con un solo comando</title>
		<link>http://rm-rf.es/servidor-web-en-python-con-un-solo-comando/</link>
		<comments>http://rm-rf.es/servidor-web-en-python-con-un-solo-comando/#comments</comments>
		<pubDate>Wed, 11 May 2011 18:58:39 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[servidor web]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=1798</guid>
		<description><![CDATA[Python es un lenguaje de programación extremadamente potente y sus módulos nos pueden hacer la vida muy fácil en determinadas situaciones. En este caso podemos levantar un servidor web sin ningún tipo de instalación ni configuración, únicamente tenemos que ejecutar el siguiente comando en la ruta que queramos compartir vía web: # python -m SimpleHTTPServer [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Python" href="http://rm-rf.es/sobre/python/"><strong>Python</strong></a> es un lenguaje de programación extremadamente potente y sus módulos nos pueden hacer la vida muy fácil en determinadas situaciones. En este caso podemos <strong>levantar un servidor web sin ningún tipo de instalación ni configuración</strong>, únicamente tenemos que ejecutar el siguiente comando en la ruta que queramos compartir vía web:</p>
<pre># python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...</pre>
<p>Automáticamente tendremos un servidor web levantado en el puerto 8000 de todas las IPs que escuchan en nuestro equipo (y en localhost por supuesto: http://localhost:8000) a través del cual se podrán procesar peticiones GET y HEAD estándar.</p>
<pre>$ netstat -a | grep 8000
tcp        0      0 *:8000                  *:*                     LISTEN</pre>
<p>Para un <em>apaño</em> rápido o para compartir cosas entre PCs puede ser muy útil en determinados momentos. El módulo utilizado es <strong>SimpleHTTPServer</strong>.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/apache-diferencia-entre-reiniciar-con-restart-y-graceful/" title="Apache: diferencia entre reiniciar con &#8216;restart&#8217; y &#8216;graceful&#8217;">Apache: diferencia entre reiniciar con &#8216;restart&#8217; y &#8216;graceful&#8217;</a></li><li><a href="http://rm-rf.es/lighttpd-proteger-una-carpeta-o-website-con-contrasena/" title="Lighttpd: proteger una carpeta o website con contraseña">Lighttpd: proteger una carpeta o website con contraseña</a></li><li><a href="http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/" title="[error] (28)No space left on device: mod_python: Failed to create global mutex">[error] (28)No space left on device: mod_python: Failed to create global mutex</a></li><li><a href="http://rm-rf.es/informacion-apache-linea-de-comandos/" title="Información sobre apache desde línea de comandos ">Información sobre apache desde línea de comandos </a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/servidor-web-en-python-con-un-solo-comando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Imaging Library &#8220;IOError: decoder jpeg not available&#8221;</title>
		<link>http://rm-rf.es/python-imaging-library-ioerror-decoder-jpeg-not-available/</link>
		<comments>http://rm-rf.es/python-imaging-library-ioerror-decoder-jpeg-not-available/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 19:52:56 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[jpeg]]></category>
		<category><![CDATA[pil]]></category>
		<category><![CDATA[Python Imaging Library]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=947</guid>
		<description><![CDATA[Últimamente me ha tocado montar y administrar un par de servidores en los que las aplicaciones corren en Python. Uno de ellos necesitaba la librería de gestión de imagenes PIL de Python (Python Imaging Library), por lo que procedí a instalarla del modo que hacemos cualquier instalación de módulos Python. Descargar e instalar: tar -xzvf [...]]]></description>
			<content:encoded><![CDATA[<p>Últimamente me ha tocado montar y administrar un par de servidores en los que las aplicaciones corren en <strong>Python</strong>. Uno de ellos necesitaba la <strong>librería de gestión de imagenes PIL de Python (Python Imaging Library)</strong>, por lo que procedí a instalarla del modo que hacemos cualquier instalación de módulos Python. Descargar e instalar:</p>
<pre>tar -xzvf Imaging-1.1.6.tar.gz
cd Imaging-1.1.6
python setup.py install</pre>
<p>El fallo fue no ejecutar antes de instalar el módulo los test que te informan si todas las dependencias se cumplen correctamente:</p>
<pre>python setup.py build_ext -i
python selftest.py</pre>
<p>Entonces, el desarrollador de la aplicación confirmó que algo extraño sucedía. No había problema para gestionar imágenes .gif o .png, pero todo tratamiento de imagenes .jpg terminaban en fallos de imagen corrupta y diversos errores.</p>
<p><a target="_blank" href="http://www.answermysearches.com/fixing-pil-ioerror-decoder-jpeg-not-available/320/">Investigando esta fuente</a>, me dispuse a ejecutar los tests que comentaba anteriormente y efectivamente el fallo era que no existía decodificador para jpeg:<br />
<em><br />
<h3>IOError: decoder jpeg not available</h3>
<p></em></p>
<p>Procedí a instalarlo desde los repositorios de CentOS:</p>
<pre>yum install libjpeg.i386 libjpeg-devel.i386</pre>
<p>Tras hacerlo seguía fallando, y era debido a que era necesario reinstalar el módulo de Python PIL para que encontrara las rutas a las librerías correspondientes de libjpeg. <strong>Fue necesario eliminar completamente PIL y volverlo a instalar, sino no funciona</strong>:</p>
<pre>rm -rf /usr/lib/python2.4/site-packages/PIL/
rm -f /usr/lib/python2.4/site-packages/PIL*</pre>
<p>A partir de aquí, reinstalé el módulo y podemos observar que los test funcionaron correctamente:</p>
<pre>$ python setup.py build_ext -i
$ python selftest.py
57 tests passed.
$ python setup.py install</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/" title="[error] (28)No space left on device: mod_python: Failed to create global mutex">[error] (28)No space left on device: mod_python: Failed to create global mutex</a></li><li><a href="http://rm-rf.es/servidor-web-en-python-con-un-solo-comando/" title="Servidor web en Python con un solo comando">Servidor web en Python con un solo comando</a></li><li><a href="http://rm-rf.es/python-cambiar-codificacion-encoding-por-defecto/" title="Python: Cambiar codificación (encoding) por defecto">Python: Cambiar codificación (encoding) por defecto</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/python-imaging-library-ioerror-decoder-jpeg-not-available/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Python: Cambiar codificación (encoding) por defecto</title>
		<link>http://rm-rf.es/python-cambiar-codificacion-encoding-por-defecto/</link>
		<comments>http://rm-rf.es/python-cambiar-codificacion-encoding-por-defecto/#comments</comments>
		<pubDate>Tue, 12 May 2009 07:41:47 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[codificacion]]></category>
		<category><![CDATA[defecto]]></category>
		<category><![CDATA[encoding]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=867</guid>
		<description><![CDATA[Python, por defecto trae una codificación en ascii, lo que probablemente os generará problemas y dolores de cabeza a la hora de utilizar caracteres con tilde o especiales como la &#8220;ñ&#8221;. El típico error es así: UnicodeEncodeError: &#8216;ascii&#8217; codec can&#8217;t encode character u&#8217;\u2014&#8242; in position 14: ordinal not in range(128) Podéis comprobar la codificación por [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Python</strong>, por defecto trae una codificación en ascii, lo que probablemente os generará problemas y dolores de cabeza a la hora de utilizar caracteres con tilde o especiales como la &#8220;ñ&#8221;. El típico error es así:</p>
<p><em><strong>UnicodeEncodeError: &#8216;ascii&#8217; codec can&#8217;t encode character u&#8217;\u2014&#8242; in position 14: ordinal not in range(128)</strong></em></p>
<p> Podéis comprobar la codificación por defecto de python desde la consola python:</p>
<pre>>>> import sys
>>> sys.getdefaultencoding()
'ascii'
</pre>
<p>Para modificar la codificación, simplemente cread un fichero llamado &#8220;sitecustomize.py&#8221; dentro de la carpeta &#8220;site-packages&#8221; de python (por ejemplo en mi instalación está en /usr/lib/python2.4/site-packages, y añadir al fichero el siguiente contenido (dependiendo de la codificación que queráis):</p>
<pre>
import sys
sys.setdefaultencoding('iso-8859-15')
</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/error-28no-space-left-on-device-mod_python-failed-to-create-global-mutex/" title="[error] (28)No space left on device: mod_python: Failed to create global mutex">[error] (28)No space left on device: mod_python: Failed to create global mutex</a></li><li><a href="http://rm-rf.es/servidor-web-en-python-con-un-solo-comando/" title="Servidor web en Python con un solo comando">Servidor web en Python con un solo comando</a></li><li><a href="http://rm-rf.es/codificar-y-descodificar-base64-desde-bash/" title="Codificar y descodificar Base64 desde BASH">Codificar y descodificar Base64 desde BASH</a></li><li><a href="http://rm-rf.es/python-imaging-library-ioerror-decoder-jpeg-not-available/" title="Python Imaging Library &#8220;IOError: decoder jpeg not available&#8221;">Python Imaging Library &#8220;IOError: decoder jpeg not available&#8221;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/python-cambiar-codificacion-encoding-por-defecto/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

