PyCon 2012由David Mertz就协作作为线程进行的演讲

2024-04-25 04:08:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在这篇由David Mertz撰写的关于PyCon 2012的协程、线程等的talk中,他展示了一个使用协程(生成器)替代线程的示例:

幻灯片内容如下:

A scheduler for weightless threads won't switch to a specific place, but will round-robin or the like:

def thread_scheduler(generators):
    thread_data = defaultdict(list)
    threads = [g() for g in generators()]
    while True:
        try:
            for t in threads:
                data = thread_data[t.__name__]
                consumer, data = t.send(data)
                thread_data[consumer].append(data)
        except StopIteration:
            break

Here consumer threads cannot be switched into directly, but once reached will get injected data.

1)generators()是打字错误吗?很可能generator是一个列表,对吗?(我知道你可以写一个函数,给你一些iterable,里面有生成器;但为了简单起见……)

2)当有这么多生成器被循环时,为什么代码只捕获一个错误?你知道吗


Tags: infordataconsumer错误线程threadwill