我知道asyncio.gather
,它“分批”了一些协程。但这不是我想要的。
我正在寻找一种方法来同时运行一个协程X
给呼叫者 ,在协程X
运行时做一些其他工作,然后再回来从协程X
获得结果。
在C#中,我们可以执行以下操作:
using System;
using System.Threading.Tasks;
using System.Threading;
namespace demo
{
class Program
{
static void Main(string[] args)
{
Task<int> task = DoWork(); // run **Concurrently**
System.Console.WriteLine("Do something else in Main");
Thread.Sleep(3000); // Do something else
// Come back to it:
var result = task.Result;
System.Console.WriteLine($"Result is {result}");
}
static async Task<int> DoWork()
{
System.Console.WriteLine("Running DoWork...");
await Task.Delay(2000);
System.Console.WriteLine("DoWork is done.");
return 1;
}
}
}
结果是
>>> dotnet run
Running DoWork...
Do something else in Main
DoWork is done.
Result is 1
注意:在上面的示例中,我们可以将Main
更改为async Task MainAsync()
,然后只需要将int result = task.Result;
更改为int result = await task;
。我的观点仍然存在。
Python asyncio是否等效?
更新这个问题不是重复的-run_in_executor
采用传统的python 功能,并将其安排在线程池或进程池执行程序上以同时实现。但是,我特别要求安排一个 async 函数(协程)。关键是我仍然可以在协程中使用await
进行同步。因此,让我再次重申我的问题:如何使用asyncio同时运行 async函数(即协程)。