编辑 显然这比我想象的要深;我只是试图在正在运行的线程中创建服务器,但无济于事。
运行 Python2.7 32 位 Windows。看起来 dde 模块(或者我使用它的方式?)不能很好地与线程一起使用。
下面是精简的代码来演示:
这有效:
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
为什么会这样?这将是我的第一个多线程程序,所以我不确定我是否在这里做一些愚蠢的事情。
但对我来说,我应该能够从线程模块的“run()”方法中调用 dde.server.conversation 对象的 ConnectTo 方法似乎是完全合理的。
我研究了多处理,但我认为这不适用于我的情况。
那么,有什么想法吗?我将非常感谢您的帮助!!!
在“threading.Thread.init (self)”中添加的编辑失败和成功的例子。还是没有骰子。
编辑 2
另外,我听说过 tcl dde 库的故事,但不知道在哪里可以找到它。如果有人可以为我提供一种在 python 中访问它的方法,我将永远欠你的债。