On Tue, Sep 27, 2022 at 3:19 AM Axy via Python-list <python-list@python.org> wrote: > > > Did you check the ThreadPoolExecutor or the ProcessPoolExecutor? They > > won't give you atomic writes unless you add a Lock or a Condition, but > > they will execute your code in another thread or process. > > Yes, I did, but they are too complicated to use. I'd like something for > humans, such as > > asynchronizer = InThreadExecutor() > > result = await asynchronizer.run(myfunc, myargs, mykwargs) >
There are two convenient APIs in asyncio. asyncio.to_thread and run_in_executor. to_thread creates and destroy a dedicated thread for the function. run_in_executor uses threadpool owned by loop. https://docs.python.org/3/library/asyncio-task.html?highlight=to_thread#asyncio.to_thread https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.run_in_executor > > and I almost implemented that borrowing code from asyncsqlite (doves fly > slowly, electric mail is even slower :)), but... > > > Keep in mind that Python's threads have a global interpreter lock > > (GIL) that prevents full parallelism. Processes work as expected, but > > require IPC and pickable objects in and out. > > yes, that became a problem. > > So, I revoke my question. Went out to redesign the whole approach. > > Thanks for reply! > > Axy. > -- > https://mail.python.org/mailman/listinfo/python-list -- Inada Naoki <songofaca...@gmail.com> -- https://mail.python.org/mailman/listinfo/python-list