Python 并发调用 Com 组件

 在 python 并发调用 Com 组件时需要作如下处理,每次 Com 组件的函数调用需要在 context 中


import win32com.client
import pythoncom
import contextlib


class ComInterface:
    def __init__(self, com_id):
        inst = win32com.client.Dispatch(com_id)
        self._inst_stream = pythoncom.CreateStreamOnHGlobal()
        pythoncom.CoMarshalInterface(self._inst_stream,
                                     pythoncom.IID_IDispatch,
                                     inst._oleobj_,
                                     pythoncom.MSHCTX_LOCAL,
                                     pythoncom.MSHLFLAGS_TABLESTRONG)

    @contextlib.contextmanager
    def context(self):
        self._inst_stream.Seek(0, 0)
        inst_interface = pythoncom.CoUnmarshalInterface(self._inst_stream, pythoncom.IID_IDispatch)
        inst = win32com.client.Dispatch(inst_interface)
        yield inst

    def do_something(self):
        with self.context() as api:
            api.do_something()

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值