使用Win32 UI DDE模块的Python线程

使用Win32 UI DDE模块的Python线程,python,multithreading,python-2.7,dde,Python,Multithreading,Python 2.7,Dde,编辑 显然,这比我想象的要深刻;我只是尝试在正在运行的线程中创建服务器,但没有成功 运行Python2.7 32位Windows。dde模块(或者我使用它的方式?)似乎不能很好地处理线程 下面是要演示的精简代码: 这项工作: 这并不是: 当它失败时,我得到以下错误: 为什么会这样?这将是我的第一个多线程程序,所以我不确定我是否在做一些愚蠢的事情 但对我来说,我应该能够从线程模块的“run()”方法中调用dde.server.conversation对象的ConnectTo方法,这似乎非常合理 我

编辑 显然,这比我想象的要深刻;我只是尝试在正在运行的线程中创建服务器,但没有成功

运行Python2.7 32位Windows。dde模块(或者我使用它的方式?)似乎不能很好地处理线程

下面是要演示的精简代码:

这项工作: 这并不是: 当它失败时,我得到以下错误: 为什么会这样?这将是我的第一个多线程程序,所以我不确定我是否在做一些愚蠢的事情

但对我来说,我应该能够从线程模块的“run()”方法中调用dde.server.conversation对象的ConnectTo方法,这似乎非常合理

我曾研究过多重处理,但我认为这不适用于我的情况

有什么想法吗?我将非常感谢你的帮助

编辑 在“threading.Thread.init(self)”中添加了失败和成功的示例。还是没有骰子

编辑2


此外,我也听说过tcl dde库的故事,但不知道在哪里可以找到它。如果有人能为我提供一种用python访问它的方法,我将永远欠你的债。

因此,在Windows DDE中,你只能在线程本身内部使用
ConnectTo
的实例。它确实支持多线程,并且当您的
运行
仍在类内部时,DDE可能会将其视为在初始线程之外。我不知道这实际上是一个答案,但在我看来,如果您的第一个代码块正在工作,则完全可能此错误只是Windows DDE和多线程的一种特性。

奇怪的是,堆栈跟踪应该更深入。难道图书馆真的毫无用处,只说它失败了吗?显然如此。关于这个错误,我得到的唯一进一步的信息是它的类型是“dde.error”。您的第一个代码块实际上没有完成您的任务吗?你说它“不会失败”。它仍然失败吗?如果是的话,你会得到不同的回溯吗?抱歉@Benjooster:我应该澄清一下,第一个区块完全有效。是的,这就是我所想的。。。希望不是这样,因为这个程序确实需要线程。你不能在第一个块中调用线程的多个实例吗<你试过t1=。。。t1.start()然后t2=。。。t2.start()?我刚在第一个块中尝试过;成功了!但当然,第一个街区无论如何都是有效的。第二个是麻烦。是的,但是你现在已经有了你的线索,所以你应该可以走了,对吧?没关系,Benjooster,我感谢你的时间。如果我有更多的名声,我会投票给你!
import win32ui
import dde
import threading

class Conversation(threading.Thread):
    def __init__(self, server, first, second, tag)
        threading.Thread.__init__(self)
        self.tag = tag #string
        self.first = first #string
        self.second = second #string
        self.server = server #dde server object

        self.conversation = dde.CreateConversation(server)

        #The focus of the problem. Here it works.
        self.conversation.ConnectTo(self.first, self.second)

    def run(self):
        print ""

def main():
    machine = "Irrelevant_MachineName"
    tag = "Irrelevant_Tagname"
    server = dde.CreateServer()
    server.Create("Irrelevant_ServerName")

    t = Conversation(server, "Irrelevant_Name", machine, tag)
    t.start()


main()    
class Conversation(threading.Thread):
    def __init__(self, server, first, second, tag):
        threading.Thread.__init__(self)
        self.tag = tag #string
        self.first = first #string
        self.second = second #string
        self.server = server #dde server object

    def run(self):
        self.conversation = dde.CreateConversation(server)

        #Focus of problem.
        #Inside here it does not work.
        self.conversation.ConnectTo(self.name1, self.name2)

def main():
    machine = "Irrelevant_MachineName"
    tag = "Irrelevant_Tagname"
    server = dde.CreateServer()
    server.Create("Irrelevant_ServerName")

    t = Conversation(server, "Irrelevant_Name", machine, tag)
    t.start()


main()
Exception in thread Thread-1:
Traceback (most recent call last):
    File "c:\Python27\lib\threading.py", line 808, in __bootstrap_inner
     self.run()
    File "DDE.py", line 28 in run
     self.conversation.ConnectTo(self.first, self.second)
error: ConnectTo failed