Python的异步协程可以同时运行到调用方吗?

时间:2019-08-20 06:38:20

标签: python python-asyncio

我知道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函数(即协程)

0 个答案:

没有答案