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
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
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