w8826543 发表于 2023-2-8 14:38:41

muzilier 发表于 2023-2-8 12:13
Pycad因为用的是ironpython,所以很多外部的Python库不能用,比如 Numpy,scipy等
但是 接口用的.Net, ...

主要是我也不是专业人士,也只能弄弄python简单一点的

muzilier 发表于 2023-2-8 14:53:40

w8826543 发表于 2023-2-8 14:38
主要是我也不是专业人士,也只能弄弄python简单一点的

我也是,你什么行业的,我是市政土木的

w8826543 发表于 2023-2-8 16:14:57

muzilier 发表于 2023-2-8 14:53
我也是,你什么行业的,我是市政土木的

地球物理勘查

chixun99 发表于 2023-2-17 17:43:36

超超超人1670 发表于 2023-2-8 11:05
你可以试试看多少条以内不用sleep,sleep多少,这个com接口天生的没办法。要不然你试试论坛上有人说过的 ...

试一下使用同步方式调用。

幽水 发表于 2023-4-7 10:16:51

不太明白,我因为只用了pyautocad,稍微了解些win32com,感觉您用的都不是这两个库?
然后我用AI搜了下,您要不试试?
这个错误一般是由于AutoCAD应用程序对象被多个线程同时调用,导致访问冲突而发生的。在使用Python连接AutoCAD时,由于Python的全局解释器锁(GIL)的存在,Python默认只能单线程运行。因此,你需要使用Python的多线程库threading来创建新线程,并确保每个线程都使用独立的AutoCAD应用程序对象。

下面是一个使用多线程连接AutoCAD的示例代码:
import clr
clr.AddReference("AcMgd")
clr.AddReference("AcCoreMgd")
from Autodesk.AutoCAD.Interop import AcApplication
from Autodesk.AutoCAD.Interop.Common import AcadApplication, AcadDocument
import threading

def create_autocad_app():
    acad = AcApplication.AcadApplication()
    return acad

def draw_line(acad):
    doc = acad.ActiveDocument
    model_space = doc.ModelSpace
    line = model_space.AddLine((0, 0, 0), (10, 10, 0))
    doc.Save()

if __name__ == "__main__":
    num_threads = 5 #设置线程数
    threads = []
    for i in range(num_threads):
      t = threading.Thread(target=draw_line, args=(create_autocad_app(),))
      threads.append(t)

    for t in threads:
      t.start()

    for t in threads:
      t.join()

上述代码中,create_autocad_app()函数用于创建一个新的AutoCAD应用程序对象,draw_line(acad)函数用于在给定的AutoCAD应用程序对象中绘制一条直线。num_threads变量定义要创建的线程数,并使用threading.Thread创建指定数量的线程。在每个线程中调用create_autocad_app()创建一个独立的AutoCAD应用程序对象,并调用draw_line(acad)在其中绘制一条直线。t.join()用于等待所有线程执行完毕。

这样,在多线程环境下调用COM接口绘图时,就能避免访问冲突,从而解决上述错误。

陈宫在家吗 发表于 2023-4-11 09:40:47

我一开始是本着Python简洁明了去的,后来发现链接CAD经常报错,现在已经放弃了,转回VBA。
页: 1 [2]
查看完整版本: python连接CAD报错,COMError: (-2147352567, '发生意外。', ('未找到文件', 'Auto...