gpt4 book ai didi

python - 一个非常简单的python异步应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:48 27 4
gpt4 key购买 nike

我开始学习异步代码,也看了很多,但是就是找不到很简单的例子自己去尝试一下,加深理解。

我想编写一个简单的 Python(最好是 3.5)程序来执行以下操作:

1) 调用虚拟异步函数 dummy() 等待几秒钟并返回一些东西
2) 继续做事直到 dummy() 返回一些东西
3) 从dummy() 中获取返回值并放入一个变量
4)继续做事

我该怎么做?

编辑:
抱歉,如果不清楚,但我知道如何使用线程来做到这一点。我的目标是使用 async-await 语句和 asyncio 模块来做到这一点。

最佳答案

为了尝试回答您的问题,我修改了 asyncio 文档中的一个示例,以包含更多您所要求的内容。 https://docs.python.org/3/library/asyncio-task.html

import asyncio

result2 = 0

async def compute(x, y):
print("Compute %s + %s ..." % (x, y))
await asyncio.sleep(1.0)
result2 = x*y
return x + y

async def print_sum(x, y):
result = await compute(x, y)
print("%s + %s = %s" % (x, y, result))

async def dosomethingelse():
print("I've got a lovely bunch of coconuts")

loop = asyncio.get_event_loop()
tasks = [print_sum(1, 2),
dosomethingelse(),
compute(2, 4)
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
print(result2)

如果您运行上面的代码,您应该会看到 dosomethingelse 正在运行,而 compute 正在等待。

我发现异步编程真的很难让我全神贯注。但我认为 asyncio 实际上比线程或多处理要简单得多,因为一切都在相同的内存空间中运行,并且(使用像这样的简单协程)程序流是完全顺序的。第一个任务运行直到遇到 await,然后下一个任务有机会,依此类推。我强烈建议通读模块文档,这非常好,并尝试编写一些示例来探索每个主题。从协程开始,然后是链接,然后是回调。

编辑:我将把它留在这里,因为我认为这是一个很好的简单示例。如果您不同意,请发表评论。请注意,yield from 语法是因为我当时使用的是稍旧版本的 python 3。

我不记得我在阅读什么教程,但这是我编写的第一个异步测试之一。

import asyncio

@asyncio.coroutine
def my_coroutine(task_name, seconds_to_sleep=3):
print("{0} sleeping for: {1} seconds".format(task_name, seconds_to_sleep))
yield from asyncio.sleep(seconds_to_sleep)
print("{0} is finished".format(task_name))

loop = asyncio.get_event_loop()
tasks = [my_coroutine("task1", 4),
my_coroutine("task2", 2),
my_coroutine("task3", 10)]

loop.run_until_complete(asyncio.wait(tasks))
loop.close()

关于python - 一个非常简单的python异步应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com