asyncio:任务中全局变量的非常奇怪的处理
asyncio : very strange handling of global variables within tasks
如果此函数 运行 作为 asyncio 中的任务:
async def test():
x = "strange"
while True:
def myfunc():
global x
x = "expected"
myfunc()
print("This is " + x)
await asyncio.sleep(1)
loop.create_task(test())
loop.run_forever()
我希望“这是预期的”,与任何普通 python 应用程序相同的结果......但是相反......它打印“这很奇怪”......为什么?
问题与asyncio无关。
global x
将 x
变量链接到模块级对象,而不是 test
函数。
改为使用 nonlocal x
以使代码按预期工作。
如果此函数 运行 作为 asyncio 中的任务:
async def test():
x = "strange"
while True:
def myfunc():
global x
x = "expected"
myfunc()
print("This is " + x)
await asyncio.sleep(1)
loop.create_task(test())
loop.run_forever()
我希望“这是预期的”,与任何普通 python 应用程序相同的结果......但是相反......它打印“这很奇怪”......为什么?
问题与asyncio无关。
global x
将 x
变量链接到模块级对象,而不是 test
函数。
改为使用 nonlocal x
以使代码按预期工作。