在异步编程中修改列表

时间:2015-10-11 11:02:29

标签: python asynchronous

我们说我有一个只包含一个成员的课程,而且它是一个列表。

class List:
    def __init__(self):
        self.l = []

    def add_to_list(self, element):
        self.l.append(element)

现在,我在asyncio.Task上并行运行了很多协程,它们在List实例上执行add_to_list。这有理由保护列表asyncio.Lock,如下所示:

import asyncio


class List:
    def __init__(self):
        self.lock = asyncio.Lock()
        self.l = []

    @asyncio.coroutine
    def add_to_list(self, element):
        with (yield from self.lock):
            self.l.append(element)

1 个答案:

答案 0 :(得分:1)

我习惯扭曲,而不是asyncio,但我认为答案是一样的。

异步并不意味着您的程序是多线程的。你不会有两个线程读/写同一个变量。异步仍然按顺序执行所有操作。您必须将其视为一个大的while True循环,它可以查看是否有事情要做。当它找到某些东西时,它会执行它并转到下一个。你在哪里看到一个收益率陈述。这就是你告诉python在功能暂停的同时做其他事情是可以的。