-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgeventsendfile.py
More file actions
27 lines (24 loc) · 843 Bytes
/
geventsendfile.py
File metadata and controls
27 lines (24 loc) · 843 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"""An example how to use sendfile[1] with gevent.
[1] http://pypi.python.org/pypi/py-sendfile/
"""
from sys import exc_info
from errno import EAGAIN
from sendfile import sendfile as original_sendfile
from gevent.socket import wait_write
def gevent_sendfile(out_fd, in_fd, offset, count):
total_sent = 0
while total_sent < count:
try:
sent = original_sendfile(out_fd, in_fd, offset + total_sent, count - total_sent)
#print '%s: sent %s [%d%%]' % (out_fd, sent, 100*total_sent/count)
total_sent += sent
except OSError:
ex = exc_info()[1]
if ex[0] == EAGAIN:
wait_write(out_fd)
else:
raise
return offset + total_sent, total_sent
def patch_sendfile():
import sendfile
sendfile.sendfile = gevent_sendfile