I have multiple greenlets sending on a common socket. Is it guaranteed that each package sent via socket.sendall is well separated or do I have to acquire a lock before each call to sendall.
So I want to prevent the following scenario:
- g1 sends
ABCD - g2 sends
1234 - received data is mixed up, for example
AB1234CD - expected is either
ABCD1234or1234ABCD
Update
After a look at the sourcecode I think this scenario cannot happen. But I have to use a lock because g1 or g2 can crash on the sendall. Can someone confirm this?
I did some tests with a high latency / low bandwitch interface and got the expected error.
This resulted (as expected) in the following error:
Here is the fixed test script with a
gevent.coros.RLockwhich doesn’t yield this error: https://gist.github.com/4249827/7f02f805331eda4091ae0b39dfea4b102cdba2fa