python主线程执行回调函数_在ctypes回调函数中使用线程锁

我想从twisted应用程序使用cTypesDLL。这里的小例子:from ctypes import *

from threading import Lock

lock = Lock()

dll = windll.LoadLibrary('mydll.dll')

l = [1,2,3]

def callback():

lock.acquire()

l.pop()

lock.release()

return 0

C_CALLBACK = CFUNCTYPE(c_int)

c_callback = C_CALLBACK(callback)

# this is a non blocking function call starts a hardware task that fires a callback upon completion

dll.registerCallback(c_callback)

while(True):

# in reality this block gets called from a twisted server application

lock.acquire()

l.append(l.pop() + 1)

lock.release()

dll有一个函数(dll.registerCallback),该函数接受ctypes回调函数,启动硬件事件,并在硬件指示硬件任务完成时触发回调。在

根据API文档:The callback function is called in a DAQmx thread.

他们试图在网络上解释什么是“DAQmx线程”:...your callback will be called and run in a DAQmx driver thread and will be run asynchronously (not in the same thread) in relation to your program.

完整的文档可以找到here。为了简单起见,我更改了示例中的函数签名。在

所以我想我们可以安全地假设dll正在生成一个线程。在

我拥有的锁是否可以确保回调函数在主循环中的pop操作的中间时不会试图访问列表l,反之亦然?或者这个方案只在使用使用threading库创建的线程时有效吗?这里推荐的做法是什么?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值