Rumah  >  Soal Jawab  >  teks badan

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中文网2741 hari yang lalu376

membalas semua(1)saya akan balas

  • 阿神

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

    Coroutine Python ialah pseudo-concurrency, bukan concurrency dalam erti kata sebenar. Hanya ada satu sinergi yang sebenarnya sedang diproses, dan jika satu sedang memproses yang lain, semuanya berada dalam keadaan tersekat. Jadi tidak akan ada kekeliruan. Ini sebahagian pemahaman saya. .

    balas
    0
  • Batalbalas