首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何避免在asyncio (telethon)中使用"global“?

在asyncio (telethon)中,避免使用"global"的方法是通过使用类或上下文管理器来管理共享状态,而不是直接使用全局变量。

  1. 使用类:将需要共享的状态封装在一个类中,并在需要访问该状态的地方创建该类的实例。这样可以确保每个协程都有自己的状态实例,避免了全局变量的使用。例如:
代码语言:txt
复制
class SharedState:
    def __init__(self):
        self.shared_data = None

    def set_data(self, data):
        self.shared_data = data

    def get_data(self):
        return self.shared_data

state = SharedState()

async def coroutine1():
    state.set_data("Hello")
    await asyncio.sleep(1)
    print(state.get_data())  # 输出: Hello

async def coroutine2():
    state.set_data("World")
    await asyncio.sleep(1)
    print(state.get_data())  # 输出: World

async def main():
    await asyncio.gather(coroutine1(), coroutine2())

asyncio.run(main())
  1. 使用上下文管理器:使用contextvars模块提供的上下文变量来管理共享状态。上下文变量可以在协程之间传递,并且每个协程都可以访问到自己的上下文变量副本。例如:
代码语言:txt
复制
import asyncio
import contextvars

shared_data = contextvars.ContextVar('shared_data')

async def coroutine1():
    shared_data.set("Hello")
    await asyncio.sleep(1)
    print(shared_data.get())  # 输出: Hello

async def coroutine2():
    shared_data.set("World")
    await asyncio.sleep(1)
    print(shared_data.get())  # 输出: World

async def main():
    await asyncio.gather(coroutine1(), coroutine2())

asyncio.run(main())

通过使用类或上下文管理器来管理共享状态,可以避免在asyncio (telethon)中使用"global",从而提高代码的可维护性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • [译]PEP 525--异步生成器

    花下猫语: 与生成器密切相关的 PEP 有 4 个,在翻译完《PEP255--简单的生成器》之后,我在交流群里说出了继续翻译的想法。恰巧,@cxapython 同学正着迷于异步,被我激起了翻译的念头,他竟然一连翻译出两篇介绍异步的 PEP:《PEP 530--异步推导式》《PEP 525--异步生成器》。今天,我给大家转载了第二篇(为了我们的生成器系列),大家若觉得赞,可以关注一下他的公众号哦。至于我正在翻译的 PEP 342,由于里面纯文字的内容太多了(估计全文近7000字),加上我这周比较忙,只能再拖稿两天了。最后,小声透露一下,我建了个 github 项目,计划收集与推进 PEP 的翻译,欢迎给 star 和做贡献哦。地址:https://github.com/chinesehuazhou/peps-cn

    03
    领券