在asyncio (telethon)中,避免使用"global"的方法是通过使用类或上下文管理器来管理共享状态,而不是直接使用全局变量。
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())
contextvars
模块提供的上下文变量来管理共享状态。上下文变量可以在协程之间传递,并且每个协程都可以访问到自己的上下文变量副本。例如: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",从而提高代码的可维护性和可扩展性。
领取专属 10元无门槛券
手把手带您无忧上云