
    ~@;j                     T    d dl mZ d dlmZ d dlmZ e G d d                      ZdS )    )deque)Logger)	singletonc                   *    e Zd ZdZd Zd Zd Zd ZdS )ActorSchedulerzMessage queue for run generator func as thread.

    Sample:

        sched = ActorScheduler()
        sched.new_actor("jab", win32utils.setup_msg_pump())
        sched.run()
    c                 b    i | _         t                      | _        t          d          | _        d S )Npyjab)actorsr   	msg_queuer   logger)selfs    iC:\Users\Administrator\AppData\Local\Temp\2\pip-target-b0z114gj\lib\python\pyjab/common/actorscheduler.py__init__zActorScheduler.__init__   s%    Woo    c                     | j                             d| d           | j                            |df           || j        |<   dS )zQ
        Admit a newly started actor to the scheduler and give it a name
        zmsg queue append new actor ''N)r   debugr   appendr
   )r   nameactors      r   	new_actorzActorScheduler.new_actor   sR     	@@@@AAAudm,,,!Dr   c                     | j                             |          x}r?| j                            d| d| d           | j                            ||f           dS dS )z1
        Send a message to a named actor
        z
send msg 'z' to actor 'r   N)r
   getr   r   r   r   )r   r   msgr   s       r   sendzActorScheduler.send   ss     KOOD)))5 	0KD3DDEDDDEEEN!!5#,/////	0 	0r   c                 "   | j         r| j                                         \  }}	 | j                            d| d| d           |                    |           n*# t
          $ r | j                            d           Y nw xY w| j         dS dS )z<
        Run as long as there are pending messages.
        zrun actor 'z' with msg 'r   zstop run action in schedulerN)r   popleftr   r   r   StopIteration)r   r   r   s      r   runzActorScheduler.run&   s     n 	B//11JE3B!!"I"I"I3"I"I"IJJJ

3  B B B!!"@AAAAAB n 	B 	B 	B 	B 	Bs   6A $BBN)__name__
__module____qualname____doc__r   r   r   r    r   r   r   r      s_         & & &
" " "0 0 0
B 
B 
B 
B 
Br   r   N)collectionsr   pyjab.common.loggerr   pyjab.common.singletonr   r   r$   r   r   <module>r(      s          & & & & & & , , , , , , )B )B )B )B )B )B )B )B )B )Br   