async def get_from_iterator(self): loop = get_event_loop() async for idx, item in enumerate(self.iterator): future = loop.run_in_executor(self.executor, safe_dispatch, (self.func, item)) self.tasks[idx] = future loop.create_task(self.process_and_release(idx)) await gather(*self.tasks.values()) self.results.put_nowait(self.done_sentinel)
async def chunker(iterable, chunk_size: int): """Asynchronous chunks generator """ aiterable = aioitertools.enumerate(iterable) args = [aiterable] * chunk_size async for chunk in aioitertools.zip_longest(*args, fillvalue=None): chunk = tuple(filter(None, chunk)) if chunk: chunk = tuple( [v for _, v in sorted(chunk, key=operator.itemgetter(0))]) yield chunk
async def images(accumulated_arrays, every=10, LENGTH=128): async for n, sec in aioitertools.enumerate(accumulated_arrays): if n % every: continue allim = [] for symb, data in sec.items(): #prices_dts = np.stack(data['ps'][-LENGTH:]) books = np.stack(data['bs'][-LENGTH:]) im = books im[:, :, 0] /= 10 im += 0.5 im = im.transpose(1, 0, 2) im = np.clip(im, 0, 1) allim.append(im[::-1]) toshow = np.concatenate(allim, axis=0) yield toshow
async def call_sql(self, ctx: MyContext, *, script: str): """Run arbitrary sql command""" pag = commands.Paginator(max_size=2048) header: typing.Optional[str] = None counts = [] async with ctx.typing(): async with self.bot.sql as sql: # type: asyncpg.Connection async with sql.transaction(): sql_start = time.perf_counter() async for i, row in aioitertools.enumerate(sql.cursor(script), 1): if header is None: header = '|'.join(row.keys()) pag.add_line(header) pag.add_line('-' * len(header)) to_add = '|'.join(map(str, row)) if len(header) * 2 + len(to_add) > 2040: raise ValueError('At least one page of results is too long to fit. ' 'Try returning fewer columns?') if pag._count + len(to_add) + 1 > 2045 or len(pag._current_page) >= 21: counts.append(i - 1) pag.close_page() pag.add_line(header) pag.add_line('-' * len(header)) pag.add_line(to_add) sql_end = time.perf_counter() if pag and pag.pages: counts.append(i) menu = SqlResponseMenu( SqlResponseEmbed(pag.pages, per_page=1), delete_message_after=True, clear_reactions_after=True ) menu.sql_cmd = script menu._cumsums = counts menu._exec_time = sql_end - sql_start await menu.start(ctx) else: await ctx.send(f'Operation completed, no rows returned.\n' f'Query completed in {(sql_end - sql_start) * 1000:.3f}ms', delete_after=10) await ctx.message.add_reaction('\N{white heavy check mark}')
async def test_enumerate_start(self): async for index, value in ait.enumerate(slist, 4): self.assertEqual(value, slist[index - 4])
async def test_enumerate(self): async for index, value in ait.enumerate(slist): self.assertEqual(value, slist[index])