Xmlrpc and threading

I have an application that uses two probes/function_probe blocks
and an xmlrpc client.
Most of the times I see that the two threads are crushing, I guess
making
concurrent requests to the SimpleXMLRPCServer.

I googled it and I found that the SimpleXMLRPCServer cannot by default
handle these cases, but if it is derived by the “*MixIn” classes you can
handle concurrent requests.

Is there something obvious and simple that needs to be changed in the
xmlrpc_server.xml block?

thanks
Achilleas

===============

Exception in thread Thread-4:
Traceback (most recent call last):
File “/usr/lib64/python2.7/threading.py”, line 811, in
__bootstrap_inner
self.run()
File “/usr/lib64/python2.7/threading.py”, line 764, in run
self.__target(self.__args, **self.__kwargs)
File “./cdma_rx1.py”, line 213, in _Esest_probe
self.set_Esest(val)
File “./cdma_rx1.py”, line 280, in set_Esest
self.set_EsN0dB_est(10
numpy.log10( cp.epsilon + abs(self.Esest)/
(abs(self.N0est)+cp.epsilon) ) )
File “./cdma_rx1.py”, line 296, in set_EsN0dB_est
self.set_DataEsN0dB_est(self.EsN0dB_est + 10*numpy.log10(
1.0-self.training_percent/100.0 ) )
File “./cdma_rx1.py”, line 329, in set_DataEsN0dB_est
self.set_appr_tcm_type(2 if (self.DataEsN0dB_est<=15.0) else (1 if
(self.DataEsN0dB_est<=20.0) else 0))
File “./cdma_rx1.py”, line 455, in set_appr_tcm_type
self.xmlrpc_client_0.set_tcm_type_selector(self.appr_tcm_type)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1224, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1578, in __request
verbose=self.__verbose
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1264, in request
return self.single_request(host, handler, request_body, verbose)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1289, in single_request
self.send_request(h, handler, request_body)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1391, in send_request
connection.putrequest(“POST”, handler, skip_accept_encoding=True)
File “/usr/lib64/python2.7/httplib.py”, line 871, in putrequest
raise CannotSendRequest()
CannotSendRequest

Exception in thread Thread-3:
Traceback (most recent call last):
File “/usr/lib64/python2.7/threading.py”, line 811, in
__bootstrap_inner
self.run()
File “/usr/lib64/python2.7/threading.py”, line 764, in run
self.__target(self.__args, **self.__kwargs)
File “./cdma_rx1.py”, line 201, in _N0est_probe
self.set_N0est(val)
File “./cdma_rx1.py”, line 273, in set_N0est
self.set_EsN0dB_est(10
numpy.log10( cp.epsilon + abs(self.Esest)/
(abs(self.N0est)+cp.epsilon) ) )
File “./cdma_rx1.py”, line 296, in set_EsN0dB_est
self.set_DataEsN0dB_est(self.EsN0dB_est + 10*numpy.log10(
1.0-self.training_percent/100.0 ) )
File “./cdma_rx1.py”, line 329, in set_DataEsN0dB_est
self.set_appr_tcm_type(2 if (self.DataEsN0dB_est<=15.0) else (1 if
(self.DataEsN0dB_est<=20.0) else 0))
File “./cdma_rx1.py”, line 455, in set_appr_tcm_type
self.xmlrpc_client_0.set_tcm_type_selector(self.appr_tcm_type)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1224, in call
return self.__send(self.__name, args)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1578, in __request
verbose=self.__verbose
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1264, in request
return self.single_request(host, handler, request_body, verbose)
File “/usr/lib64/python2.7/xmlrpclib.py”, line 1294, in single_request
response = h.getresponse(buffering=True)
File “/usr/lib64/python2.7/httplib.py”, line 1033, in getresponse
raise ResponseNotReady()
ResponseNotReady

HI Achilleas,

You could just write your own class that does that, and modify the
s and in the .xml. BUT then you yourself are in charge of
making sure you don’t concurrently access block members in damaging
ways.
However, these crashes you see are suboptimal. You should maybe file a
bug on gnuradio.org, so that this doesn’t get lost in time.

Greetings,
Marcus