Klaas wrote:
> It seems clear that the import lock does not include fully-executing
> the module contents.  To fix this, just import cookielib before the

What is the exact meaning of "not include fully-executing" - regarding the 
examples "import cookielib" ?
Do you really mean the import statement can return without having executed the 
cookielib module code fully?
(As said, a simple deadlock is not at all my problem)

> threads are spawned.  Better yet, use your own locks around the
> acquisition of the opener instance (this code seems fraughtfully
> thread-unsafe--fix that and you solve other problems besides this one).
> 

thanks. I will probably have to do the costly pre-import of things in main 
thread and spread locks as I have also no other real idea so far.

Yet this costs the smoothness of app startup and corrupts my believe in Python 
capabs of "lazy execution on demand". 
I'd like to get a more fundamental understanding of the real problems than just 
a general "stay away and lock and lock everything without real understanding".

* I have no real explanation why the import of a module like cookielib is not 
thread-safe. And in no way I can really explain the real OS-level crashes on 
dual cores/fast CPU's. Python may throw this and that, Python variable states 
maybe wrong, but how can it crash on OS-level when no extension libs are 
(hopefully) responsible?
* The Import Lock should be a very hard lock: As soon as any thread imports 
something, all other threads are guaranteed to be out of any imports. A dead 
lock is not the problem here.
* cookielib module execution code consists only of definitions and of 
re.compile's. re.compile's should be thread safe?
* the things in my code patter are function local code except "opener = 
urlcookie_openers.get(user)" and "urlcookie_openers[user] = opener" : Simple 
dictionary accesses which are atomic from all my knowledge and experience. I 
think, I have thought about enough, what could be not thread safe. The only 
questionable things have to do with rare change of some globals, but this has  
not at all to do with the severe problems here and could only affect e.g wrong 
url2_proxy or double/unecessary re-creation of an opener, which is uncritical 
in my app.


I'm still puzzled and suspect there is a major problem in Python, maybe in 
win32ui or - no idea ... ?


-robert

==================================================================================
def f():
           ...
           opener = urlcookie_openers.get(user)
           if not opener:
               import cookielib                        #<----1
               cj=cookielib.CookieJar()                #<----2                 
build_opener = urllib2.build_opener
               httpCookieProcessor = urllib2.HTTPCookieProcessor(cj)
               if url2_proxy:
                   opener = build_opener(url2_proxy,httpCookieProcessor)
               else:
                   opener = build_opener(httpCookieProcessor)
               opener.addheaders   #$pycheck_no
               opener.addheaders= app_addheaders
               urlcookie_openers[user] = opener
           ufile = opener.open(urllib2.Request(url,data,dict(headers)))
           ...


thread.start_new(f,()) 
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to