2 __all__
= ['Thread', 'schedule', 'sleep']
8 import stackless_socket
10 stackless_socket
.install()
12 Thread
= stackless
.tasklet
13 schedule
= stackless
.schedule
15 from heapq
import heappush
20 __enter__
= lambda *args
: None
21 __exit__
= lambda *args
: None
25 channel
= stackless
.channel()
29 self
.channel
.send(None)
33 self
.val
or self
.channel
.receive()
36 channel
= stackless
.channel()
37 endTime
= time
.time() + seconds
38 heappush(sleepingTasklets
, (endTime
, channel
))
39 # Block until we get sent an awakening notification.
43 def handle_request(self
):
45 request
, client_address
= self
.get_request()
48 stackless
.tasklet(self
.handle_request_tasklet
)(request
, client_address
)
51 def handle_request_tasklet(self
, request
, client_address
):
52 if self
.verify_request(request
, client_address
):
54 self
.process_request(request
, client_address
)
56 self
.handle_error(request
, client_address
)
57 self
.close_request(request
)
59 def ManageSleepingTasklets():
61 while len(sleepingTasklets
):
62 endTime
= sleepingTasklets
[0][0]
63 if endTime
> time
.time():
65 channel
= sleepingTasklets
[0][1]
66 sleepingTasklets
.pop(0)
67 # It does not matter what we send as it is not used.
71 stackless
.tasklet(ManageSleepingTasklets
)()
74 from threading
import Thread
as PyThread
75 from threading
import Lock
, Event
76 from SocketServer
import ThreadingMixIn
78 class Thread(PyThread
):
79 def __init__(self
, func
):
80 super(Thread
, self
).__init
__(target
=func
)
83 super(Thread
, self
).start()