2015-10-11 23 views
0

比方說,我有一個只包含一個成員的類,它是一個列表。在異步編程中修改列表

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

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

而現在,我有很多並行在上表實例執行add_to_listasyncio.Task的運行協同程序。這是否有理由保護名單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

我習慣扭曲,而不是asyncio,但我認爲答案是一樣的。

異步並不意味着你的程序是多線程的。你不會有兩個線程讀/寫同一個變量。異步仍然按順序執行所有操作。你必須把它看作是一個大的while True循環,看看是否有什麼事情要做。當它發現什麼時,它會執行它並轉到下一個。你從哪裏看到一個收益聲明。這是你告訴Python的一點,即在該功能暫停的同時做其他事情是可以的。

+0

我認爲你是對的:) – Yuras