标签:python linux multithreading ctypes pthreads
假设我有一个python脚本,它通过ctypes加载一个共享库(SL).
> SL设置了一个pthread T1
> python脚本通过SL配置回调,即python脚本调用SL中的函数并引用python callables
alt text http://www.gliffy.com/pubdoc/1993061/L.jpg
现在,假设T1调用“回调”函数,以下假设为真:
> Python端的回调函数在T1的上下文中执行
>我可以使用queue在T1和Python VM之间进行通信
>我需要在Python VM端轮询所述队列
我理解线程,共享状态等所有概念,但我还没有深入挖掘Python的多线程方面.由于目前还有一个我不太了解的适应层(ctypes),我恐怕会错过这个过程的一些关键方面.
解决方法:
通常不需要轮询队列(您可以将Python端的另一个线程用于对其执行阻塞.get调用),但这并不是什么大问题.问题是,通过这样的安排,您可能会被GIL抓住 – 请参阅此维基百科页面中的三个链接,以获得充分的处理方法.
当您使用Python C API使用C(或Cython)代码与C进行接口连接时,您可以非常简单地释放和获取GIL,至少可以避免死锁等;使用ctypes,GIL操作在回调到/来自C情况下是自动的,所以如果有任何其他锁定正在发生死锁是一种风险(因为事情不在你的控制之内,你不能轻易确保应用了Djikstra的Banker Algorithm).
标签:python,linux,multithreading,ctypes,pthreads 来源: https://codeday.me/bug/20190710/1423110.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。