Hello,<br>
<br>
I am new to twisted and I have a few questions: I have implemented a TCPServer<br>
and the associated Factory, which manages data and dispatches treatments<br>
(According to the tutorial it's not the best solution but actually this is not<br>
the point ;) )<br>
<br>
All of the treatments run in threads and thus use shared data. The allData<br>
dictionnary is critical since it can be used by multiple threads. How can I keep <br>
the allData integrity ? Does Twisted core provide such facilites or do I<br>
have to use semaphore or other stuff ?<br>
<br>
<br>
class GestionnaireXXX(protocol.Protocol)<br>
&nbsp;&nbsp;&nbsp; def dataReceived(self, data):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.factory.dispatch(data)<br>
<br>
class GestionnaireXXXFactory(protocol.ServerFactory):<br>
&nbsp;&nbsp;&nbsp; def __init__(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.allData = {}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.initData()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self._dispatcher = {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1: self.alert,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4: self.create,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; def initData(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if os.path.isfile(TEMP)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.allData = aot.unjellyFromSource(file(TEMP, 'r'))<br>
&nbsp;&nbsp;&nbsp; def dispatch(self, data):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; splitedData = data.split('\n')<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method = self._dispatcher.get(len(splitedData), self.doNothing)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reactor.runInThread(method, splitedData)<br>
<br>
&nbsp;&nbsp;&nbsp; def create(self, *data):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Some treatments on allData<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aot.jellyToSource(file(TEMP, 'w'))<br>
<br>
&nbsp;&nbsp;&nbsp; def alert(self, *unused):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # XXX<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sem = DeferredSemaphore()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sem.acquire()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; allDataCopy = self.allData.copy()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.allData.clear()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sem.release()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;End XXX<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # some long treatments on allDataCopy<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>
<br>
Thank's,<br>
<br>
--<br>
Olivier Guilloux<br>

<br>