[issue36626] asyncio run_forever blocks indefinitely

2019-04-17 Thread Andrew Svetlov


Change by Andrew Svetlov :


--
resolution:  -> wont fix
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-17 Thread Andrew Svetlov


Andrew Svetlov  added the comment:

Technically signal handlers are called from main thread, while loop can be 
executed in another one.
*In general* `call_soon_threadsafe()` is the correct solution.
Also, it works fine just now with Python 3.5+

Let's close as won't fix

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-17 Thread Dan Timofte


Dan Timofte  added the comment:

`loop.call_soon_threadsafe(loop.stop)` solves the problem because it has the 
write_to_self there. I can use that or call loop._write_to_self() myself before 
calling loop.stop(). 

In my code i'm stoping the loop from the exception_handler not signal. The code 
was a small example i thought of that reproduces the described behaviour.

You can close the issue if it's ok for you.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-16 Thread Andrew Svetlov


Andrew Svetlov  added the comment:

Not sure about `create_task()`.
Usually you create tasks from async code, where the `_write_to_self()` call is 
not needed.

Handling writing to self-pipe is not free, starting very many tasks at once can 
hit performance.

Stopping the loop is another beast, we can perform relative slow operations in 
such calls.

Thinking more about the issue I'm inclining to reject my initial proposal.

If you want to stop a loop from signal handler you should make 
`loop.call_soon_threadsafe(loop.stop)` call because `loop.stop()` is not 
thread-safe operation by definition.

Threadsafe call solves your problem, isn't it?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-15 Thread Dan Timofte


Change by Dan Timofte :


--
keywords: +patch
pull_requests: +12770
stage:  -> patch review

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-14 Thread Dan Timofte


Dan Timofte  added the comment:

i will provide a patch, i'll make a pull request next week.

a call to self._write_to_self() should also be added to create_task() before it 
returns . i'll make the correction for this as well.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-14 Thread Andrew Svetlov


Andrew Svetlov  added the comment:

Callin `self._write_to_self()` from `loop.stop()` should fix your problem.

Would you provide a patch?

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-14 Thread Andrew Svetlov


Change by Andrew Svetlov :


--
versions: +Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-13 Thread Dan Timofte


Change by Dan Timofte :


--
type:  -> behavior

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue36626] asyncio run_forever blocks indefinitely

2019-04-13 Thread Dan Timofte


New submission from Dan Timofte :

after starting run_forever if all scheduled tasks are consumed run_once will 
issue a KqueueSelector.select(None) which will block indefinitely :
https://www.freebsd.org/cgi/man.cgi?query=select&sektion=2&apropos=0&manpath=FreeBSD+12.0-RELEASE+and+Ports#DESCRIPTION

after this new tasks are not being processed, trying to stop event loop with 
stop() is not working.

this blocks immediatly : 
import asyncio
import sys
import signal


def cb_signal_handler(signum, frame):
asyncio.get_event_loop().stop()


def main():
signal.signal(signal.SIGINT, cb_signal_handler)

# asyncio.get_event_loop().create_task(asyncio.sleep(1))
asyncio.get_event_loop().run_forever()

main()

With asyncio.sleep uncomment it will block after 4 cycles.

--
components: asyncio, macOS
messages: 340182
nosy: asvetlov, dantimofte, ned.deily, ronaldoussoren, yselivanov
priority: normal
severity: normal
status: open
title: asyncio run_forever blocks indefinitely
versions: Python 3.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com