Hi Jean-Paul,

> >**************
> >Am I correct that "deferToThread" does not immediately forward the call
> >to a background thread, but only the next time the reactor loop runs?
> >**************

> However, I can direct you to the implementation of
> deferToThread:
> 
> http://twistedmatrix.com/trac/browser/trunk/twisted/python/threadpool.py#L1
> 19
> 
> Notice the `self.q.put(o)`.  This matches up with the call to `self.q.get` in 
> the
> same module:
> 
> http://twistedmatrix.com/trac/browser/trunk/twisted/python/threadpool.py#L1
> 58
> 
> Together, these bits of source should demonstrate that there's no waiting for 
> a
> reactor iteration before the work is enqueued.  The work goes into the Queue
> instance, and instantly any worker thread is free to grab it.

Ok, I see.

There might be a mutex or something in the Queue implementation (if it's not
a lockless queue implementation) or the GIL might be involved.

I have no convinving explanation for the behavior I see (which also seems to be
platform agnostic).

Another wild guess (besides above) I have: maybe the OS does not immediately
schedule other process threads for execution if the current thread (the one
pushing to the Queue) is very busy ..

Thanks,
Tobias


_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to