когда жду asyncio.sleep (0.01) не достаточно - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть эта программа

import time
import asyncio


def is_prime(x):

    return not any(x//i == x/i for i in range(x-1, 1, -1))


async def highest_prime_below(x):

    print('Highest prime below %d' % x)
    for y in range(x-1, 0, -1):
        if is_prime(y):
            print('→ Highest prime below %d is %d' % (x, y))
            return y
        await asyncio.sleep(0.01)
    return None


async def main():

    t0 = time.time()
    await asyncio.wait( [
        highest_prime_below(100000),
        highest_prime_below(10000),
        highest_prime_below(1000)
        ] )
    t1 = time.time()
    print('Took %.2f ms' % (1000*(t1-t0)))


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
#loop.close()

, которая обнаруживает простые числа.Вы также можете увидеть это здесь https://osf.io/w8u26/

Мой вопрос, допустим, у меня слишком много вызовов функций

await asyncio.wait( [
        highest_prime_below(100000),
        highest_prime_below(10000),
        highest_prime_below(1000)
        #100 function calls here
        ] )

, и я только столько асинхронно спал await asyncio.sleep(0.01)

Должны ли все функции завершаться в течение установленного времени или некоторые функции будут отменены по истечении времени ожидания? *

1 Ответ

1 голос
/ 21 апреля 2019

должны ли все функции завершиться в течение установленного времени или некоторые функции будут отменены по истечении времени сна?.

Количество времени, в течение которого вы спите, не имеет значения;единственная цель, которой служит await asyncio.sleep(), состоит в том, чтобы заставить asyncio приостановить выполнение к циклу событий и дать возможность другим задачам выполняться.Вы также можете ожидать asyncio.sleep(0), и вы достигнете того же эффекта .

Другими словами: нет, время выполнения функций никак не связано с указанным временемво сне.Пока вы используете asyncio.wait() для ожидания всех сопрограмм, все они будут завершены к тому времени, когда wait() вернется.Увеличение времени сна только заставит их работать дольше.

...