My favorites | Sign in
Project Logo
                
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from __future__ import division
import select, itertools
from time import sleep

from base import ProactorBase, perform_recv, perform_accept, perform_send, \
perform_sendall, perform_sendfile, \
perform_connect


class SelectProactor(ProactorBase):
def run(self, timeout = 0):
"""
Run a proactor loop and return new socket events. Timeout is a timedelta
object, 0 if active coros or None.

select timeout param is a float number of seconds.
"""
ptimeout = timeout.days*86400 + timeout.microseconds/1000000 + timeout.seconds \
if timeout else (self.resolution if timeout is None else 0)
if self.tokens:
#~ print ([act for act in self.tokens
#~ if self.tokens[act] == perform_recv
#~ or self.tokens[act] == perform_accept],
#~ [act for act in self.tokens
#~ if self.tokens[act] == perform_send
#~ or self.tokens[act] == perform_sendall
#~ or self.tokens[act] == perform_sendfile
#~ or self.tokens[act] == perform_connect],
#~ [act for act in self.tokens])

ready_to_read, ready_to_write, in_error = select.select(
[act for act in self.tokens
if self.tokens[act] == perform_recv
or self.tokens[act] == perform_accept],
[act for act in self.tokens
if self.tokens[act] == perform_send
or self.tokens[act] == perform_sendall
or self.tokens[act] == perform_sendfile
or self.tokens[act] == perform_connect],
[act for act in self.tokens],
ptimeout
)
#~ print ready_to_read, ready_to_write, in_error
for act in in_error:
self.handle_error_event(act, 'Unknown error.')
last_act = None
for act in itertools.chain(ready_to_read, ready_to_write):
if last_act:
self.handle_event(last_act)

last_act = act
return self.yield_event(last_act)
else:
sleep(timeout)
Show details Hide details

Change log

r588 by ionel.mc on Apr 26, 2009   Diff
Removed trailing spaces. Fixed
inconsistent end of line format.

Merged from amcnabb8's branch.
Go to: 
Project members, sign in to write a code review

Older revisions

r556 by ionel.mc on Jan 03, 2009   Diff
some cleanup like remove useless
imports and a couple of relics of old
past
r485 by ionel.mc on Sep 13, 2008   Diff
Reverted
sleep(min(resolution,timeout)) to
sleep(timeout) in proactors
r473 by ionel.mc on Sep 12, 2008   Diff
Optimized some lookups and added a
epoll implementation using the
select.epoll from python 2.6
All revisions of this file

File info

Size: 2359 bytes, 54 lines
Hosted by Google Code