python多线程可以在windows下实现吗_在多线程中使用win32com

我正在使用CherryPy开发一个web应用程序,需要通过COM访问一些应用程序。

现在,我用每个请求创建一个应用程序的新实例,这意味着每个请求都要等待3秒,应用程序才能启动,实际作业等待0.01秒。

我想启动每个COM应用程序一次,并保持它的活动性,然后在以下请求中重用它几秒钟,因为大多数情况下,它被5-10个ajax请求的突发使用,然后几个小时内什么都没有。

是否可以在CherryPy应用程序的所有线程中共享COM对象?

下面是一些实验的总结,这些实验展示了它现在如何处理每个请求,以及它如何不跨线程工作。

以下代码成功启动和停止Excel:>>> import pythoncom, win32com.client

>>> def start():

global xl

xl = win32com.client.Dispatch('Excel.Application')

>>> def stop():

global xl

xl.quit()

xl = None

>>> start()

>>> stop()

但是下面的代码启动Excel并在3秒后关闭它。>>> import pythoncom, win32com.client, threading, time

>>> def start():

global xl

pythoncom.CoInitialize()

xl = win32com.client.Dispatch('Excel.Application')

time.sleep(3)

>>> threading.Thread(target=start).start()

我添加了对CoInitialize()的调用,否则xl对象将无法工作(请参见this post)。

我添加了3秒钟的暂停,这样我就可以在任务管理器上看到EXCEL.EXE进程启动并保持3秒钟的活动状态。

为什么在开始它的线结束后它就死了?

我查看了^{}的文档,但是我不知道是否可以让它在多线程环境中工作。


版权声明:本文为weixin_31270363原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。