[pyar] os.dup(), threads y os.read()
Marcos Dione
mdione en grulic.org.ar
Mar Dic 1 19:59:42 ART 2015
tengo el siguiente código en py3.5 (no he probado en otro):
--- 8< ---
In [2]: import threading
In [4]: import os
In [5]: f= os.dup (0)
In [12]: def foo (f):
while True:
d= os.read (f, 1024)
if not d:
break
In [13]: t= threading.Thread (target=foo, args=(f, ))
In [14]: t.start ()
# lo siguiente cuesta mucho tipear porque el thread se chorea casi todos los caracteres :)
In [15]: os.close(f)
# acá aprieto enter y pasa esto:
In [16]: Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python3.4/threading.py", line 911, in _bootstrap_inner
self.run()
File "/usr/lib/python3.4/threading.py", line 859, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-12-94b37b63f852>", line 3, in foo
d= os.read (f, 1024)
OSError: [Errno 9] Bad file descriptor
--- >8 ---
o sea, el os.dup() me devuelva un fd que apunta al mismo file que 0
(stdin, por si no se dieron cuenta). lo que parece pasar es que os.read()
blockea esperando data, y cuando cierro el fd, *no pasa nada*. lo que yo
esperaría es que el read() del loop vea el EOF y devuelva ''. es muy
delirante pedir eso? sino, es un bug? si lo es, muy probablemente sea un
bug en el kernel, pero no me he sentado a ver aún.
--
(Not so) Random fortune:
14:01 < Chipaca> e-squizo: yo sé, y vos sabés, que con los dedos podés contar hasta 1024
14:02 < Chipaca> o 1023 si empezás en 0 :)
14:03 < Chipaca> o 59049 si tenés buen control de una falange
14:03 < Chipaca> o 1048576 si tenés buen control de *dos* falanges
14:03 < Chipaca> o 1099511627776 si tenés buen control de dos falanges en manos y pies y usás sandalias
More information about the pyar
mailing list