python3递归协程等待所有完成

时间:2020-02-27 23:28:05

标签: python python-3.x asynchronous concurrency coroutine

我想知道如何在递归调用中等待所有协程完成。如果它是多线程的,那么我通常会有一个任务队列和一个固定大小的线程池,每个线程在完成上一个任务后都会尝试从队列中获取任务。而且我可以轻松加入线程池。

但是在协程中,我不确定执行此操作的正确方法是什么。 这是我想出的一个小例子

row.setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        String message = "Here is your message"
        setIntent(getIntent().putExtra("message_key", message));
        registerForContextMenu(v);
        openContextMenu(v);
        unregisterForContextMenu(v);
        return true;
    }
});


我在这里有两个问题:

  1. 不确定我们是否需要互斥体,以便多个协程访问import asyncio async def main(): tasks = [] res = [] tasks.append(recur(0, res, tasks)) for t in tasks: await t return res async def recur(depth, res, tasks): res.append(1) if depth > 10: return for _ in range(2): tasks.append(recur(depth + 1, res, tasks)) res = asyncio.get_event_loop().run_until_complete(main()) print(len(res)) # expect 4095 是安全的?
  2. tasks正在增长,因此在主循环中我们尝试等待每个任务,但是我们永远无法确保tasks
  3. 中没有其他任务要添加

我测试了很多次,结果始终是4095,但是我认为此解决方案有某种错误。谁能提供正确的实施方案?

0 个答案:

没有答案
相关问题