I mean how can I protect the socket from concurrent use?

Am Dienstag, 3. März 2015 13:08:58 UTC+1 schrieb Stefan Rink:
>
> Yes it is shared between multiple requests. Could you give me a hint how 
> that can be accomplished?
>
> Many thanks again!!!
>
>
> Am Dienstag, 3. März 2015 12:59:06 UTC+1 schrieb Graham Dumpleton:
>>
>> To use socket.makefile, the socket must be in blocking mode (it can not 
>> have a timeout). Is this the case?
>>
>> To what extent is the socket visible/usable from multiple request 
>> threads? If it is shared, how are you protecting it from concurrent use?
>>
>> Although CherryPy WSGI server may also use multithreading, the dynamics 
>> of how threads are used in mod_wsgi daemon mode could well be quite 
>> different. So if is a multithreading issue, you may simply have been lucky 
>> and not encountered it yet on CherryPy WSGI server.
>>
>> So just to rule it out, explain whether this one socket can be used from 
>> different request threads and different times and if so how that usage is 
>> protected.
>>
>> Graham
>>
>> On 03/03/2015, at 10:52 PM, Stefan Rink <[email protected]> wrote:
>>
>> self.f is the result from calling socket.make_file
>> I just don't know why this is working only with one thread under flask 
>> and mod_wsgi. On flask-dev-server and on CherryPy standalone it also works. 
>> And CherryPy is also multithreaded.
>>
>> Am Dienstag, 3. März 2015 12:36:34 UTC+1 schrieb Graham Dumpleton:
>>>
>>> What is the type of the 'self.f' object?
>>>
>>> You talk about having a 'socket file', but sockets don't have a proper 
>>> file like object interface.
>>>
>>> If you were somehow trying to wrap a file like object interface around a 
>>> socket, that could cause issues. This is because a read on a socket can 
>>> return partial results so the error may be the result of trying to decode 
>>> incomplete data.
>>>
>>> What you would need to ensure you are doing is read the full message 
>>> from the socket first, wrap that in a StringIO object and then feed that to 
>>> pickle.load().
>>>
>>> Graham
>>>
>>> On 03/03/2015, at 10:23 PM, Stefan Rink <[email protected]> wrote:
>>>
>>> Hello Graham,
>>>
>>> i get this error and sometimes pickle.load gives an empty string.
>>> The other process dumps data into the socket file that I load
>>> result = pickle.load(self.f)
>>> File "/usr/lib/python2.7/pickle.py", line 1378, in load
>>> return Unpickler(file).load()
>>> File "/usr/lib/python2.7/pickle.py", line 858, in load
>>> dispatch[key](self)
>>> File "/usr/lib/python2.7/pickle.py", line 1138, in load_pop
>>> del self.stack[-1]
>>> IndexError: list assignment index out of range
>>>
>>> Sorry I cannot provide more but have no clue why this is going wrong. 
>>> Thank you for your time.
>>>
>>>
>>> Am Dienstag, 3. März 2015 12:01:48 UTC+1 schrieb Graham Dumpleton:
>>>>
>>>> Can you go back and explain and provide the actual details of the error 
>>>> message you are getting. If I can see the actual error messages then it 
>>>> might be more obvious.
>>>>
>>>> Graham
>>>>
>>>> On 03/03/2015, at 8:49 PM, Stefan Rink <[email protected]> wrote:
>>>>
>>>> Hello Graham,
>>>>
>>>> thank you very much for your answer.
>>>>
>>>> Only standard Python types are pickled: dicts, bytestrings. It works 
>>>> only when using a single thread in the WSGIDaemonProcess directive! Is 
>>>> that 
>>>> helping?
>>>>
>>>> Thank you
>>>>
>>>>
>>>> Am Dienstag, 3. März 2015 09:58:11 UTC+1 schrieb Graham Dumpleton:
>>>>>
>>>>>
>>>>> On 03/03/2015, at 7:10 PM, Stefan Rink <[email protected]> wrote: 
>>>>>
>>>>> > Hello Graham, 
>>>>> > 
>>>>> > under mod_wsgi I get pickle errors when pickling over a socket to 
>>>>> another process (no Apache child). Can this be caused by mod_wsgi? 
>>>>> > mod_wsgi is in Daemon Mode. 
>>>>>
>>>>> The only restriction I really know of which is specific to mod_wsgi is 
>>>>> that you cannot pickle types which are defined in the WSGI script file 
>>>>> itself. You should ensure that any types are defined in separately 
>>>>> importable modules on the Python module search path. Those same modules 
>>>>> with the types in them should also be importable in the application the 
>>>>> data is being sent to so they are available when unpicking the data. 
>>>>>
>>>>> For more information about the destruction I talk about see: 
>>>>>
>>>>> http://code.google.com/p/modwsgi/wiki/IssuesWithPickleModule 
>>>>>
>>>>> Graham 
>>>>>
>>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "modwsgi" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/modwsgi.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "modwsgi" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/modwsgi.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "modwsgi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/modwsgi.
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to