Hi,
> First question: “is Ryu’s call to event_catcher(ev) itself already
> asynchronous?”
As far as I know, the answer for this question is 'No' against 'each event'.
Ryu raises events (e.g. EventOFPPacketIn) asynchronously, but sequentially
invokes the event handlers
which '@set_ev_cls(...)' decorated method for each event.
For example...
When Ryu raises event.Foo, _Foo_event_handler_in_B will not be called until
_Foo_event_handler_in_A is done,
but if event.Ber occurs, _Ber_event_handler_in_A may be invoked regardless of
_Foo_event_handler_in_A is done or not.
class RyuAppA(app_manager.RyuApp):
@set_ev_cls(event.Foo)
def _Foo_event_handler_in_A(ev):
...
@set_ev_cls(event.Ber)
def _Ber_event_handler_in_A(ev):
...
class RyuAppB(app_manager.RyuApp):
@set_ev_cls(event.Foo)
def _Foo_event_handler_in_B(ev):
...
If you want to call self.WorkOn(ev.msg) asynchronously, how about using
ryu.lib.hub.spawn function?
spawn (or spawn_after) invokes the new thread.
e.g.)
from ryu.lib import hub
...
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def event_catcher(self, ev):
hub.spawn(self.WorkOn, ev.msg)
Thanks,
Iwase
On 2015年10月23日 01:51, Yi Tseng wrote:
> Hi
>
> According to ryu source code:
>
> When ryu receive a message from switch, it will push it to a queue, and pop
> the message from here:
>
> https://github.com/osrg/ryu/blob/master/ryu/base/app_manager.py#L271
>
> and application will call event handlers. (And it might be block)
>
> To avoid blocking, we can add timeout to event handlers, for example:
>
> https://github.com/TakeshiTseng/ryu/commit/aa75f116111239ecba6b49601f0c6ad5e54aace3
>
> However, it's not safe to terminate one handler if we don't have any rollback
> mechanism.
>
>
>
>
> 2015-10-22 17:45 GMT+08:00 Tim LEGRAND <[email protected]
> <mailto:[email protected]>>:
>
> Hello folks,____
>
> __ __
>
> I am quite new to Ryu (but not to Python nor threading), so forgive me in
> advance if I’m mistaken with something.____
>
> __ __
>
> My Ryu application subscribes to Ryu’s events using :____
>
> __ __
>
> @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)____
>
> def event_catcher(self, ev):____
>
> self.WorkOn(ev.msg)____
>
> __ __
>
> What I want to achieve is getting this last function call
> (self.WorkOn(ev.msg)) running asynchronously, and concurrently(1)(2), so that
> other events that could be raised and handled while the first one is
> processing. My first try would be to use green-threads to handle such
> events.____
>
> __ __
>
> First question: “is Ryu’s call to event_catcher(ev) itself already
> asynchronous?”____
>
> __ __
>
> __è __Case 1: If yes, I guess that asynchronism is obtained with a
> green-thread. Does it make /creating a new green-thread dedicated to its
> body/ redundant?____
>
> __è __Case 2: If no, I guess that events are blocking, so the Ryu
> Application is not able to receive simultaneous events, so it would be
> interesting to make the body’s function asynchronous. Am I right?____
>
> __ __
>
> (I know that there’s a dedicated thread in Ryu Applications working as an
> event-loop listener - see
> https://osrg.github.io/ryu-book/en/html/arch.html#application-programming-model,
> but what I can’t figure out is if the events are raised asynchronously or
> not)____
>
> __ __
>
> If no (Case 2): “Am I able to use green-threads to implement asynchronism
> in the events handling?”____
>
> __ __
>
> I am asking because I’ve read that “While threads and queues is currently
> implemented with eventlet/greenlet, a direct use of them in a Ryu application
> is strongly discouraged.”____
>
> Why is that? In what manner my greenlet coroutines would affect Ryu’s
> ones?____
>
> __ __
>
> Thanks for your time!____
>
> Tim____
>
> __ __
>
> (1) and ideally /in parallel/ but Python has its own drawbacks about
> parallelism depending on the Python implementation used (GIL or not), and it
> is not the purpose of my question here____
>
> (2) be sure not to confuse between concurrency and parallelism:
> concurrency is the /ability/ to run in parallel, parallelism is about to use
> several CPU cores at the same time.____
>
> __ __
>
> *__ __*
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Ryu-devel mailing list
> [email protected] <mailto:[email protected]>
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
>
>
>
> --
> Yi Tseng (a.k.a Takeshi)
> Taiwan National Chiao Tung University
> Department of Computer Science
> W2CNLab
>
> http://blog.takeshi.tw
>
>
> ------------------------------------------------------------------------------
>
>
>
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel