python 子线程阻塞主线程_异步后台线程:主线程阻塞中的run函数

这篇博客介绍了如何在后台线程中安全地调用主线程的方法,通过创建Future对象并利用事件循环来协调。在后台线程执行任务后,可以设置Future的结果,主线程则通过等待Future完成来获取结果。这种方法确保了线程间的正确通信和同步。
摘要由CSDN通过智能技术生成

如果我正确地理解了您想要什么,就没有什么可以阻止您将Future传递给主线程,以便在func_for_main_thread完成后将其设置为done。在后台线程你可以等待这个未来。在

换句话说:import asyncio

from functools import partial

async def called_threadsafe(loop, func):

current_loop = asyncio.get_event_loop()

fut = asyncio.Future()

def call_and_set():

try:

res = func()

except Exception as exc:

f = partial(fut.set_exception, exc)

current_loop.call_soon_threadsafe(f)

else:

f = partial(fut.set_result, res)

current_loop.call_soon_threadsafe(f)

loop.call_soon_threadsafe(call_and_set) # submit to execute in other thread

return await fut # in current thread await other thread executed func and set future

演示如何工作的完整代码:

^{pr2}$

输出:fg_main started 2252

bg_main started 5568

executed in fg thread 2252

got result in bg thread 5568

bg_main finished 5568

fg_main finished 2252

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值