찾다

 >  Q&A  >  본문

coroutine - 关于python中的协程的变量问题

对于线程来说,可能会有线程安全的问题,比如

total = 0

def do_something():
    global total
    # do something else
    total += 1

这个函数,对全局变量total自增,在多线程的情况下,运行十万次,最终total的结果可能不是100000

而对于单线程中的多个协程来说,可能会出现这种情况吗,比如

total = 0

async def do_something():
    global total
    # do something else
    total += 1
    
def test():
    while True:
        # do something
        asyncio.ensure_future(do_something())

当do_something()在协程中运行十万次时,total的最终结果一定是十万吗?

PHP中文网PHP中文网2810일 전416

모든 응답(1)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 09:58:00

    Python의 코루틴은 진정한 의미의 동시성이 아니라 의사 동시성입니다. 실제로 처리되는 시너지는 하나만 있을 수 있으며, 하나가 다른 시너지를 처리한다면 모두 차단된 상태가 됩니다. 그러면 혼란이 없을 것입니다. 이것은 나의 부분적인 이해입니다. .

    회신하다
    0
  • 취소회신하다