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

Reply via email to