【发布时间】:2020-02-26 12:11:38
【问题描述】:
我的python 3.6程序需要异步写一些文件,这样 它可以将写入与另一个线程上的计算重叠。 该程序使用 C 模块库来计算结构,并调用 该库中的函数以保存它。下面是一个草图:
async def save_thing(thing_ref):
my_lib.save_thing(thing_ref)
def main():
handles = []
for i in [1, 2, 3]:
thing_ref = my_lib.compute_thing(i)
handle = save_thing(thing_ref)
handles.append(handle)
await_all(handles)
# ... proceed with program ...
mylib.save_thing 释放 GIL:在进入时它调用 PyEval_SaveThread() 和
退出时它调用PyEval_RestoreThread()。我在上面明确省略了
增加thing_ref 的引用计数,但我希望我会管理引用
在save_thing 完成之前,保持thing_ref 存活是很重要的。
谁能帮我把那幅草图充实一下,给我看我的机器
需要包括使 my_lib.save_thing() 的主体在另一个线程上同时执行,
与python循环?我正在摸索试图理解角色
事件循环、asyncio 模块、GIL 和 python 线程。我怀疑简单地释放 GIL 不会导致主线程解释器在那时恢复,
我不清楚如何让它这样做。
【问题讨论】: