Skip to content

Commit 0ad3e89

Browse files
authored
Merge pull request yidao620c#277 from Flynnon/patch-4
Update p12_using_generators_as_alternative_to_threads.rst
2 parents ded49dd + f799d43 commit 0ad3e89

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

source/c12/p12_using_generators_as_alternative_to_threads.rst

+11-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
def new_task(self, task):
4646
'''
4747
Admit a newly started task to the scheduler
48-
4948
'''
5049
self._task_queue.append(task)
5150
@@ -89,7 +88,7 @@
8988
...
9089

9190
到此为止,我们实际上已经实现了一个“操作系统”的最小核心部分。
92-
生成器函数就是认为,而yield语句是任务挂起的信号。
91+
生成器函数就是任务,而yield语句是任务挂起的信号。
9392
调度器循环检查任务列表直到没有任务要执行为止。
9493

9594
实际上,你可能想要使用生成器来实现简单的并发。
@@ -103,7 +102,7 @@
103102
104103
class ActorScheduler:
105104
def __init__(self):
106-
self._actors = { } # Mapping of names to actors
105+
self._actors = {} # Mapping of names to actors
107106
self._msg_queue = deque() # Message queue
108107
109108
def new_actor(self, name, actor):
@@ -148,7 +147,6 @@
148147
# Send to the printer task
149148
sched.send('printer', n)
150149
# Send the next count to the counter task (recursive)
151-
152150
sched.send('counter', n-1)
153151
154152
sched = ActorScheduler()
@@ -175,6 +173,7 @@
175173
class YieldEvent:
176174
def handle_yield(self, sched, task):
177175
pass
176+
178177
def handle_resume(self, sched, task):
179178
pass
180179
@@ -201,7 +200,6 @@
201200
'''
202201
Add a newly started task to the scheduler
203202
'''
204-
205203
self._ready.append((task, None))
206204
self._numtasks += 1
207205
@@ -253,18 +251,21 @@
253251
def __init__(self, sock, data):
254252
self.sock = sock
255253
self.data = data
254+
256255
def handle_yield(self, sched, task):
257-
258256
sched._write_wait(self.sock.fileno(), self, task)
257+
259258
def handle_resume(self, sched, task):
260259
nsent = self.sock.send(self.data)
261260
sched.add_ready(task, nsent)
262261
263262
class AcceptSocket(YieldEvent):
264263
def __init__(self, sock):
265264
self.sock = sock
265+
266266
def handle_yield(self, sched, task):
267267
sched._read_wait(self.sock.fileno(), self, task)
268+
268269
def handle_resume(self, sched, task):
269270
r = self.sock.accept()
270271
sched.add_ready(task, r)
@@ -273,12 +274,16 @@
273274
class Socket(object):
274275
def __init__(self, sock):
275276
self._sock = sock
277+
276278
def recv(self, maxbytes):
277279
return ReadSocket(self._sock, maxbytes)
280+
278281
def send(self, data):
279282
return WriteSocket(self._sock, data)
283+
280284
def accept(self):
281285
return AcceptSocket(self._sock)
286+
282287
def __getattr__(self, name):
283288
return getattr(self._sock, name)
284289

0 commit comments

Comments
 (0)