我们说我有一个只包含一个成员的课程,而且它是一个列表。
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)
答案 0 :(得分:1)
我习惯扭曲,而不是asyncio,但我认为答案是一样的。
异步并不意味着您的程序是多线程的。你不会有两个线程读/写同一个变量。异步仍然按顺序执行所有操作。您必须将其视为一个大的while True
循环,它可以查看是否有事情要做。当它找到某些东西时,它会执行它并转到下一个。你在哪里看到一个收益率陈述。这就是你告诉python在功能暂停的同时做其他事情是可以的。