LINUX.ORG.RU

История изменений

Исправление derlafff, (текущая версия) :

Я даже не знаю, что такое Gosched.

import asyncio

async def foo():

    print('Starting foo')
    await asyncio.sleep(5)
    print('Foo finished')


async def bar():

    print('Starting infinite loop')
    while True:
        pass


async def start():

    tasks = [
            foo(),
            bar(),
    ]

    await asyncio.wait(tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(start())
loop.close()
% python3 test.py                                                                                                                    :(
Starting foo
Starting infinite loop

Что нужно поставить в бесконечный цикл вместо pass, чтобы управление временно вернулось в ioloop и корутина foo выполнилась до конца? Это и есть gosched и бенчмарк страдает из-за той же проблемы. В go оно выполняется неявно при каждом вызове функции, поэтому проблема именно в том бенчмарке не проявляется.

Исправление derlafff, :

Я даже не знаю, что такое Gosched.

import asyncio

async def foo():

    print('Starting foo')
    await asyncio.sleep(5)
    print('Foo finished')


async def bar():

    print('Starting infinite loop')
    while True:
        pass


async def start():

    tasks = [
            foo(),
            bar(),
    ]

    await asyncio.wait(tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(start())
loop.close()
% python3 test.py                                                                                                                    :(
Starting foo
Starting infinite loop

Что нужно поставить в бесконечный цикл вместо pass, чтобы управление временно вернулось в ioloop и корутина foo выполнилась до конца? Это и есть gosched и бенчмарк страдает из-за той же проблемы. В go оно выполняется неявно при каждом вызове функции, поэтому проблемы там не заметно.

Исходная версия derlafff, :

Я даже не знаю, что такое Gosched.

import asyncio

async def foo():

    print('Starting foo')
    await asyncio.sleep(5)
    print('Foo finished')


async def bar():

    print('Starting infinite loop')
    while True:
        pass


async def start():

    tasks = [
            foo(),
            bar(),
    ]

    await asyncio.wait(tasks)

loop = asyncio.get_event_loop()
loop.run_until_complete(start())
loop.close()
% python3 test.py                                                                                                                    :(
Starting foo
Starting infinite loop

Что нужно поставить в бесконечный цикл вместо pass, чтобы управление временно вернулось в ioloop и корутина foo выполнилась до конца? Это и есть gosched и бенчмарк страдает из-за той же проблемы.