is there enough information?

Jeff Schwab jeff at schwabcenter.com
Tue Feb 26 13:42:11 EST 2008


castironpi at gmail.com wrote:
> On Feb 26, 12:37 pm, Jeff Schwab <j... at schwabcenter.com> wrote:
>> castiro... at gmail.com wrote:
>>> On Feb 26, 12:04 pm, Jeff Schwab <j... at schwabcenter.com> wrote:
>>>> castiro... at gmail.com wrote:
>>>>> On Feb 26, 11:37 am, Jeff Schwab <j... at schwabcenter.com> wrote:
>>>>>> castiro... at gmail.com wrote:
>>>>>>> On Feb 26, 10:59 am, Preston  Landers <pland... at gmail.com> wrote:
>>>>>>>> On Feb 26, 1:45 am, castiro... at gmail.com wrote:
>>>>>>>>> Two options occurred to me, which the first showed up in the earlier
>>>>>>>>> extremely skeletal and cryptic post:
>>>>>>>> Perhaps you would be more likely to get the kind of help you seem to
>>>>>>>> want
>>>>>>>> if you refrained from posting "cryptic and skeletal" messages. The
>>>>>>>> fact that many
>>>>>>>> other people have pointed this out to you as of late would tend to
>>>>>>>> suggest
>>>>>>>> you are trolling, i.e. intentionally trying to foster miscommunication
>>>>>>>> and threads
>>>>>>>> that do nothing to advance anyones understanding.
>>>>>>>> And regarding your other recent post about trying to find a "solution"
>>>>>>>> to the "problem"
>>>>>>>> of immutable types...  Due to the above reasons you are unlikely to
>>>>>>>> influence the
>>>>>>>> design of the core language with half-baked stream of consciousness
>>>>>>>> ramblings. These
>>>>>>>> belong in your LiveJournal, not in c.l.python.
>>>>>>>> If you have a problem you need help with, please read this entire
>>>>>>>> document about 3 times
>>>>>>>> before posting anything else:
>>>>>>>> http://catb.org/~esr/faqs/smart-questions.html
>>>>>>>> Specifically this:
>>>>>>>> http://catb.org/~esr/faqs/smart-questions.html#beprecise
>>>>>>>> and this:
>>>>>>>> http://catb.org/~esr/faqs/smart-questions.html#goal
>>>>>>> Ugh, very well.  You call for an explanation.
>>>>>>> Back home, the original post would be interesting, so I wrote it.
>>>>>>> Whatever reactions other people have to them is information that is
>>>>>>> unavailable to me.  I don't know you.  I'm rather irked by a
>>>>>>> proportion of posts, but for my part, it's hard to get me to point a
>>>>>>> finger.
>>>>>>> I am not a troll.  I want a sustainable, healthy, productive,
>>>>>>> educational, informative relationship with frequenters of c.l.p, the
>>>>>>> Python community at large, and anyone who has anything non-negative to
>>>>>>> contribute.  If you are wanting to see how I react to hostility, just
>>>>>>> ask.  I'll fake it for you, but only for a second at a time.
>>>>>> Wow.  I sure hope I don't come across like castiron does here.
>>>>>>> Now, what help is it that you believe I seem to want?  All I asked for
>>>>>>> was, ideas.
>>>>>> It's a little difficult for me to interpret your code, partly because I
>>>>>> am nbt very familiar with Python's support for concurrency.  But what
>>>>>> are you trying to a achieve?
>>>>>> You mentioned:  "I recently ran into a case (* would that be helpful to
>>>>>> describe here?) where thread1 had to do something, thread2 had to do
>>>>>> something after that, and thread1 had to wait for that, then do
>>>>>> something else, and thread2 again had to wait before starting the first
>>>>>> thing again."
>>>>>> This is ordinarily called a Producer-Consumer model.  It is often
>>>>>> implemented using semaphores.  Googling "python semaphore" turns up this
>>>>>> documentation:
>>>>>> http://www.python.org/doc/lib/semaphore-objects.html
>>>>>> That page, in turn, links to an example of the proper use of semaphores
>>>>>> in Python.  Does that help?- Hide quoted text -
>>>>>> - Show quoted text -
>>>>> Hi Jeff.  I've enjoyed your recent posts.
>>>>> I'm not quite sure a semaphore is exactly the synchronization object
>>>>> I'm looking for, but I'm a little new to concurrency myself.
>>>>> In the interface I design, only one with-call can get the result at
>>>>> once.  It was my understanding that semaphores, and many other synch.
>>>>> objs. returned control at random.
>>>> I take this to mean that your interface offers a function returns
>>>> immediately, rather than waiting for the work to complete.  Is that correct?
>>>>> In fact, in the background, I'm working on something a little more
>>>>> substantial than this, but it's not done, so the only review of it I
>>>>> can perform is of its interface.
>>>> The interface is (in my opinion) usually the best place to start the
>>>> code, anyway.
>>>>> If someone has a "yes, but in half the lines, at twice the speed,"
>>>>> then tear my posts to shreds.
>>>> It is not quite clear what your code is intended to do.  That doesn't
>>>> mean there's necessarily anything wrong with it, but it's hard for most
>>>> Usenetters to take the time to read such long sequences of code.  Would
>>>> it be possible for you to post a complete program, that we can actually
>>>> run?  Wherever your code is not yet ready, just put a line or two of
>>>> "stub" code, and add a comment to explain what should be happening.- Hide quoted text -
>>>> - Show quoted text -
>>> Sure.  And honestly, I have no idea what the best way to go about this
>>> is, except keep trying.
>>> th1       th2
>>> set cmd
>>>           run cmd
>>> get result
>>>           acknowledge
>>> continue  continue
>>> th2 won't -run cmd- until th1 completes -set cmd-.  th1 won't -get
>>> result- until th2 completes -run cmd-.  and once -acknowledge-
>>> completes, both can go about their merry ways.
>> That is exactly the kind of case where semaphores are usually used.
>> Thread1 can "fill" the semaphore when the command is ready, then Thread2
>> can "empty" the semaphore once it has finished running the command.
>>
>>> In the example last
>>> night, th2 continued to loop to handle requests in a collection of
>>> threads, but th1 had pressing business elsewhere.
>> No problem.  It should be waiting on a semaphore, though, not just
>> "hot-looping."  (I am amused by the idea of a thread having pressing
>> business elsewhere.)
>>
>>> Dated 05:07 PST, the code should be runnable.  But the only thing is,
>>> I developed it in Python 3.0a2.  In particular, line 71 def
>>> thloop( thd ), and line 82 def op100( thd ), should demonstrate that
>>> interface.
>> Sorry, I am still having some trouble following it.  :-(  Maybe somebody
>> else here is also trying 3.0 already.- Hide quoted text -
>>
>> - Show quoted text -
> 
> The relevant snippet is:
> 
> def thloop( thd ):
>     while thd.cont:
>         with thd.step[1]:
>             if not thd.cont: break
>             print( 'step 1', end= ' ' )
>             thd.ret= thd.cmd+ 1
>         with thd.step[3]:
>             print( 'step 3' )
>             thd.ret= None
>         thd.step.complete()
> 
> def op100( thd ):
>     with thd.step[0]:
>         print( 'step 0', end= ' ' )
>         thd.cmd= 100
>     with thd.step[2]:
>         print( 'step 2', end= ' ' )
>         ret1= thd.ret
>     assert ret1== 101
> 
> I don't see how semaphores could prevent thd.step[2] and thd.step[1]
> from taking turns in the wrong order.  Polling is bad.

I'll try to take a closer look at this a little later.  It will be a 
good chance to learn Python's semaphore interface.  However, I am 
getting the feeling you may have to solve this one on your own. :(



More information about the Python-list mailing list