Почему эта ячейка Jupyter выполняется раньше, чем ячейка асинхронного цикла? - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь отправить 6 запросов API за один сеанс и записать, сколько времени это заняло. Сделайте это n раз. Я храню количество времени в списке. После этого я распечатываю некоторую информацию списка и визуализирую данные списка.

  1. Что работает: загрузка в формате .py, удаление ссылок ipython и запуск кода в виде сценария командной строки.
  2. Что также работает: ручной запуск ячеек и ячейка с ошибками после завершения ячейки цикла.
  3. Что не работает: перезапуск и запуск всех ячеек в блокноте jupyter. Кажется, последняя ячейка не ждет предыдущей;последний, кажется, выполняется первым, и жалуются на пустой список. Ошибка на изображении ниже.

enter image description here

Ячейка 1:

# submit 6 models at the same time
# using support / first specified DPE above
auth = aiohttp.BasicAuth(login=USERNAME, password=API_TOKEN)

async def make_posts():
    for i in range(0, 6):
        yield df_input['deployment_id'][i]

async def synch6():
    #url = "%s/predApi/v1.0/deployments/%s/predictions" % (PREDICTIONSENDPOINT,DEPLOYMENT_ID)
    async with aiohttp.ClientSession(auth=auth) as session:
        post_tasks = []
        # prepare the coroutines that post
        async for x in make_posts():
            post_tasks.append(do_post(session, x))
        # now execute them all at once
        await asyncio.gather(*post_tasks)


async def do_post(session, x):
    url = "%s/predApi/v1.0/deployments/%s/predictions" % (PREDICTIONSENDPOINT, x)
    async with session.post(url, data = df_scoreme.to_csv(), headers=PREDICTIONSHEADERS_csv) as response:
        data = await response.text()
        #print (data)

Ячейка 2:

chonk_start = (datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.000Z"))

perf1 = []
n = 100

for i in range(0, n):
    start_ts = round(time.time() * 1000)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(synch6())
    end_ts = round(time.time() * 1000)
    perf1.append(end_ts - start_ts)

Ячейка 3:

perf_string(perf1, 'CHONKS')

Явная ошибка (см. Изображение), по-видимому, является просто результатом попытки работать с пустым списком. Список кажется пустым, потому что эта ячейка выполняется до того, как тестовая ячейка заполняет список - хотя я не знаю почему. Кажется, это проблема только внутри ноутбука.

РЕДАКТИРОВАТЬ: При дальнейшем тестировании ... это работает нормально на моем локальном (python3, mac) ноутбуке Jupyter. Где он терпит неудачу - на ноутбуке AWS Sagemaker conda python3.

...