Пример #1
0
    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)
Пример #2
0
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
Пример #3
0
 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
Пример #4
0
    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}')
Пример #5
0
 async def test_enumerate_start(self):
     async for index, value in ait.enumerate(slist, 4):
         self.assertEqual(value, slist[index - 4])
Пример #6
0
 async def test_enumerate(self):
     async for index, value in ait.enumerate(slist):
         self.assertEqual(value, slist[index])