Re: observer pattern (notification chain synchronization)

2008-05-11 Thread Ville M. Vainio
Alan Isaac <[EMAIL PROTECTED]> writes:


> OK, thanks.
>
> Another approach is to begin with a set of stocks
>
> and remove them as they report.  You can then trigger
>
> a report with the empty set instead of repeatedly
>
> calling ``all``. After a report the set can be
>
> "refilled".

Ah, and I obviously didn't read the whole thread before posting ;-)
--
http://mail.python.org/mailman/listinfo/python-list


Re: observer pattern (notification chain synchronization)

2008-05-11 Thread Ville M. Vainio
Alan Isaac <[EMAIL PROTECTED]> writes:


> Here is one way:
>
> - for each fund, create a ``reportreceived`` dict that maps stocks to 
> booleans (initially False)
> - as each stock notifies its funds, the fund changes False to True and checks 
> ``all(reportreceived.values())`` to determine whether it is ok to notify 
> investors.
> - When it is ok, the fund notifies investors and resets all the
> ``reportreceived`` values.
>
> Is this sensible enough? What are standard and better ways?

You could explore the performance of popping items from the dict/set,
instead of toggling the value so to true. Once the dict is empty, you
are done. Of course the dict/set would be called
stocks_that_havent_reported, or a saner & shorter variant of that.

The idea here is that checking a dict/set for emptiness is
close-to-zero time operation.


--
http://mail.python.org/mailman/listinfo/python-list


Re: observer pattern (notification chain synchronization)

2008-05-10 Thread Alan Isaac

J. Cliff Dyer wrote:


looks like a good approach to me




OK, thanks.

Another approach is to begin with a set of stocks

and remove them as they report.  You can then trigger

a report with the empty set instead of repeatedly

calling ``all``. After a report the set can be

"refilled".



Cheers,

Alan Isaac


--
http://mail.python.org/mailman/listinfo/python-list


Re: observer pattern (notification chain synchronization)

2008-05-09 Thread J. Cliff Dyer
That looks like a good approach to me.  Alternative to a dict would just
be a count of reported stocks tested against the total number of stocks,
but if one stock reports twice before another reports at all, you'll get
funny results.  Your method is probably better, in the general case.

Cheers,
Cliff


On Fri, 2008-05-09 at 13:51 +, Alan Isaac wrote:
> A question related to the observer pattern...
> 
> Suppose I have a variant: there are stocks, mutual funds, and investors.  Let 
> us say that funds are observers for multiple stocks, and investors are 
> observers for funds.  Once a "month" all stocks notify their observing funds 
> of their end-of-month price, and *then* all fund to notify their observing 
> investors of their end-of-month investment value. 
> 
> What is a good way to enforce this timing?  (I.e., a fund should not notify 
> an its investors until all stocks have reported.)
> 
> Here is one way:
> 
> - for each fund, create a ``reportreceived`` dict that maps stocks to 
> booleans (initially False)
> - as each stock notifies its funds, the fund changes False to True and checks 
> ``all(reportreceived.values())`` to determine whether it is ok to notify 
> investors.
> - When it is ok, the fund notifies investors and resets all the 
> ``reportreceived`` values. 
> 
> Is this sensible enough? What are standard and better ways?
> 
> Thank you, 
> Alan Isaac 
> 
> PS I am drawing on the description of the observer pattern at
> http://www.dofactory.com/Patterns/PatternObserver.aspx#_self1>
> The real world aspects are just to add some concreteness.
> --
> http://mail.python.org/mailman/listinfo/python-list
> 

--
http://mail.python.org/mailman/listinfo/python-list


observer pattern (notification chain synchronization)

2008-05-09 Thread Alan Isaac

A question related to the observer pattern...

Suppose I have a variant: there are stocks, mutual funds, and investors.  Let us say that funds are observers for multiple stocks, and investors are observers for funds.  Once a "month" all stocks notify their observing funds of their end-of-month price, and *then* all fund to notify their observing investors of their end-of-month investment value. 


What is a good way to enforce this timing?  (I.e., a fund should not notify an 
its investors until all stocks have reported.)

Here is one way:

- for each fund, create a ``reportreceived`` dict that maps stocks to booleans 
(initially False)
- as each stock notifies its funds, the fund changes False to True and checks 
``all(reportreceived.values())`` to determine whether it is ok to notify 
investors.
- When it is ok, the fund notifies investors and resets all the ``reportreceived`` values. 


Is this sensible enough? What are standard and better ways?

Thank you, 
Alan Isaac 


PS I am drawing on the description of the observer pattern at
http://www.dofactory.com/Patterns/PatternObserver.aspx#_self1>
The real world aspects are just to add some concreteness.
--
http://mail.python.org/mailman/listinfo/python-list