Hello, Andi. It is not about to send StopIteration Exception over the wire b/c on the server It invokes IndexSearcher.doc(i) and on the server again it iterates on doc.fields(). So results from the server's function is never returns b/c iteration is "buzz".
I have checked that server's method is started from WorkerThread which is subclass of PyLucene.PythonThread. I cannot debug this method started from WorkerThread b/c WingIDE does not catch breakpoint. >> for f in d.fields(): >> print f >> >> I receive buzz from this "for". It never returns program execution >> from cycle. Actually it prints out as many fields as it has but I >> suppose it tries to get next item after the last item... AV> The way a python iterator terminates is via a StopIteration exception. I AV> suspect that the exception is not being propagated from the server back to the AV> client if the enumeration is happening over the wire. AV> How to debug this otherwise ? AV> It's all open source, right ? so get into the code of the CORBA client and AV> server, turn on logging if there is, a take it one step at a time. AV> Andi.. >> >> This happens only under CORBA thread. If I do this in the pure Python >> then everything okay. >> I have no clue how to narrow this bug or get closer to solution how to >> avid it or fix it.. What do you suggest? I know >> that is very hard to give advice on distance. I can try to narrow this >> bug or continue my investigations, if you know how. >> >> Thank you. >> >> AV> PyLucene.PythonThread is a subclass of Python's threading.Thread that >> AV> delegates the creation of the actual OS thread to libgcj. Wherever you >> see >> AV> threading.Thread used replace that with >> AV> PyLucene.PythonThread, that's all you >> AV> should be having to do. >> AV> We've done the same in Chandler where we use Twisted. >> >> AV> class WorkerThread(PyLucene.PythonThread): >> >> AV> Andi.. >> >> AV> On Sun, 6 Feb 2005, Yura Smolsky wrote: >> >>>> Hello, Andi. >>>> >>>> I hope you will help me with one issue. Here is situation: >>>> >>>> I have CORBA object which is called Server. This server contains >>>> instance of IndexSearcher class. When somebody wants to call some >>>> method of this server then CORBA creates separate thread for each >>>> call. Every method of server work with IndexSearcher object. >>>> >>>> So, we have some multi thread environment which operates with >>>> IndexSearcher object. >>>> >>>> CORBA creates threads using threading.Thread. >>>> I guess, I need to replace threading.Thread with PythonThread threads. >>>> Right? >>>> >>>> I attached code with creating of CORBA threads: >>>> >>>> _thr_init = threading.Thread.__init__ >>>> _thr_id = threading._get_ident >>>> _thr_act = threading._active >>>> _thr_acq = threading._active_limbo_lock.acquire >>>> _thr_rel = threading._active_limbo_lock.release >>>> >>>> class WorkerThread(threading.Thread): >>>> >>>> I think everything is clear, but it is only for my mind. Maybe you >>>> will find a trap there. Please check it and answer can I just replace >>>> threading.Thread with PyLucene.PythonThread? >>>> Do I need to fix more code than just this replacement? >>>> >>>> BIG thanks :) >>>> >>>> Yura Smolsky >>>> >> >> >> >> AV> >> >> >> >> Yura Smolsky, >> >> >> >> AV> Yura Smolsky, _______________________________________________ pylucene-dev mailing list [email protected] http://lists.osafoundation.org/mailman/listinfo/pylucene-dev
