Solución:
Si desea utilizar win32com en varios subprocesos, debe trabajar un poco más como COMObject
no se puede pasar a un hilo directamente. Necesitas usar CoMarshalInterThreadInterfaceInStream()
y CoGetInterfaceAndReleaseStream()
para pasar instancia entre hilos:
import pythoncom, win32com.client, threading, time
def start():
# Initialize
pythoncom.CoInitialize()
# Get instance
xl = win32com.client.Dispatch('Excel.Application')
# Create id
xl_id = pythoncom.CoMarshalInterThreadInterfaceInStream(pythoncom.IID_IDispatch, xl)
# Pass the id to the new thread
thread = threading.Thread(target=run_in_thread, kwargs={'xl_id': xl_id})
thread.start()
# Wait for child to finish
thread.join()
def run_in_thread(xl_id):
# Initialize
pythoncom.CoInitialize()
# Get instance from the id
xl = win32com.client.Dispatch(
pythoncom.CoGetInterfaceAndReleaseStream(xl_id, pythoncom.IID_IDispatch)
)
time.sleep(5)
if __name__ == '__main__':
start()
Para obtener más información, consulte: https://mail.python.org/pipermail/python-win32/2008-June/007788.html
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)