Python asyncio 的全局变量是否安全?

时间:2021-06-17 15:06:53

标签: python python-asyncio

subj,或者有什么更好的方法来访问异步外部数据的当前状态?

我有 2 个异步进程 data_gen() 和 worker()。

  • data_gen() 生成 DAT
  • worker() 根据 DAT 的当前状态进行操作。直接或通过队列传递它是不好的,因为它们是 DAT 过去状态的快照(我在这里正确吗?)。

就我而言:

  1. worker() 不需要知道 DAT 的历史,只需要知道当前状态
  2. DAT 仅在 1 个地方更改
  3. worker() 可以在操作之前立即制作 DAT 的副本(DAT 在执行过程中可能会更改,但这不是问题)
import asyncio
import random

DAT = 0.0

async def data_gen():
    global DAT
    while True:
        DAT = round(random.random() * 10, 2)
        print(f'data updated to: {DAT}')
        await asyncio.sleep(DAT)


async def worker():
    while True:
        print(f'worker has {DAT}')
        await asyncio.sleep(random.random() * 3)

async def main():
    await asyncio.gather(data_gen(), worker())


asyncio.run(main())

1 个答案:

答案 0 :(得分:1)

<块引用>

Python asyncio 的全局变量安全吗?

是的,他们是;实际上一次只有一个协程在运行,直到awaited

相关问题