【发布时间】:2014-07-05 11:14:43
【问题描述】:
我正在关注 Python 大师 David Beazley 的幻灯片。它指出“生成器也用于并发。这是一个示例:
from collections import deque
def countdown(n):
while n > 0:
print("T-minus", n)
yield
n -=1
def countup(n):
x = 0
while x > n:
print("Up we go", x)
yield
x +=1
# instantiate some tasks in a queue
tasks = deque([countdown(10),
countdown(5),
countup(20)
])
# run a little scheduler
while tasks:
t = tasks.pop() # get a task
try:
next(t) # run it until it yields
tasks.appendleft(t) # reschedule
except StopIteration:
pass
这是输出:
T-minus 5
T-minus 10
T-minus 4
T-minus 9
T-minus 3
T-minus 8
T-minus 2
T-minus 7
T-minus 1
T-minus 6
T-minus 5
T-minus 4
T-minus 3
T-minus 2
T-minus 1
问题是生成器是如何引入并发的,它是如何体现的?
【问题讨论】:
-
在该示例中,并发性很简单(对我而言)。也许问题在于您对术语并发的理解?
-
请用外行的方式解释并发,以便我和像我这样的其他人更好地理解。我认为这是一个接一个的任务,因为它们被删除然后放回队列中
-
如果你还没有,你可以试试 PyCon 演讲,这些幻灯片来自:youtube.com/watch?v=MCs5OvhV9S4
标签: python asynchronous concurrency generator