Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #99392 > unrolled thread
| Started by | Marc Aymerich <glicerinu@gmail.com> |
|---|---|
| First post | 2015-11-24 21:17 +0100 |
| Last post | 2015-11-24 21:17 +0100 |
| Articles | 1 — 1 participant |
Back to article view | Back to comp.lang.python
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: Futex hang when running event loop on a separated thread Marc Aymerich <glicerinu@gmail.com> - 2015-11-24 21:17 +0100
| From | Marc Aymerich <glicerinu@gmail.com> |
|---|---|
| Date | 2015-11-24 21:17 +0100 |
| Subject | Re: Futex hang when running event loop on a separated thread |
| Message-ID | <mailman.31.1448396244.20593.python-list@python.org> |
On Tue, Nov 24, 2015 at 8:41 PM, Zachary Ware
<zachary.ware+pylist@gmail.com> wrote:
> On Tue, Nov 24, 2015 at 12:37 PM, Marc Aymerich <glicerinu@gmail.com> wrote:
>> still it appears to work only if the main thread is in the foreground
>> (as of calling Thread() with deamon=True), I don't get why it behaves
>> differently :( maybe it is waiting for other stuff, but no idea how to
>> confirm this with strace of other means.. i always see the same
>> 'futex(0x7f9a70000c10, FUTEX_WAIT_PRIVATE, 0, NULL'
>
> What's your exact version of Python? asyncio is still evolving
> rapidly, and may behave differently between patch releases (say,
> between 3.4.1 and 3.4.3).
>
> I have tried out your reproducer with my fix, and I can't provoke a
> hang using Python 3.4.3 on either OSX or Ubuntu Trusty. Can you give
> some more specific directions to reproduce?
>
> --
> Zach
> --
> https://mail.python.org/mailman/listinfo/python-list
Yep, I'm a bit lost about how fuse implements going into background...
so the only way I have to reproduce this so far is by using fuse :(
# pip3 install fusepy
import asyncio
import threading
import time
import os
import sys
from fuse import FUSE, Operations
def run_loop(loop_container):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
coro = asyncio.start_server(lambda: 1, '0.0.0.0', 8888, loop=loop)
server = loop.run_until_complete(coro)
loop_container['loop'] = loop
loop.run_forever()
if __name__ == '__main__':
mountpoint = sys.argv[1]
loop_container = {}
handler = threading.Thread(target=run_loop, args=(loop_container,))
handler.start()
try:
# with foreground=True works
FUSE(Operations(), mountpoint, foreground=False)
finally:
loop_container['loop'].call_soon_threadsafe(loop_container['loop'].stop)
$ mkdir /tmp/7777
$ python3.5 /tmp/eventtest.py /tmp/7777
# Another terminal
$ ps aux | grep python3.5
glic3 19983 0.5 0.1 215540 10772 ? Ssl 21:05 0:00
python3.5 me.py /tmp/7777
$ sudo strace -p 19983
Process 19983 attached - interrupt to quit
futex(0x7fff42affca0, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
# Here i fire
$ fusermount -u /tmp/7777
tgkill(19983, 19985, SIGRTMIN) = 0
futex(0x7fff42affc30, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f9840afc9d0, FUTEX_WAIT, 19984, NULL
I've just tried with python3.5 and the same behavior. The thing is
that with foreground=True it just works.
thank you for your time!
--
Marc
Back to top | Article view | comp.lang.python
csiph-web