Esempio n. 1
0
def async_show_image_mat(image_mat, text=None, title=None, cell_size: tuple = None, image_name=None):
    """
    :return: an async task object
    """
    from async_ import AsyncLoop, AsyncManager
    ui_loop = AsyncManager.get_loop(AsyncLoop.UIThread)
    coro = coro_show_image_mat(image_mat, text=text, title=title,
                               cell_size=cell_size, block=False, image_name=image_name)
    task = AsyncManager.create_task(coro, loop=ui_loop)
    return AsyncManager.run_task(task, loop=ui_loop)  # possibly only one task in this batch
Esempio n. 2
0
def async_preload_gpu_devices():
    """
    Preload in another loop/thread, hopefully call this during waiting for user inputs or other waiting period.
    """
    # IMPROVE: needn't to run in an aysncio loop (host in a new thread), to run in a new thread is enough.
    from async_ import AsyncLoop, AsyncManager

    async def coro_simple_run(): preload_gpu_devices()
    loop = AsyncManager.get_loop(AsyncLoop.DataProcess)
    DEBUG(f"[tensorflow] preload gpu devices in another thread...")
    task = AsyncManager.run_task(coro_simple_run(), loop=loop)
    return task
Esempio n. 3
0
    def async_run(self, **params):
        """
        Generally we need to launch web app in another loop/thread, to not block ML operations.
        """
        webapp = self

        # IMPROVE: web app need not to run in an aysncio loop (host in a new thread), to run in a new thread is enough.
        from async_ import AsyncLoop, AsyncManager

        async def coro_webapp_run():
            webapp.run(**params)

        webapp_loop = AsyncManager.get_loop(AsyncLoop.WebApp)
        task = AsyncManager.run_task(coro_webapp_run(), loop=webapp_loop)
        DEBUG(
            f"[webapp_loop] listening to port {params.get('port', '<unknown>')} ..."
        )
        return task