2013-04-06 29 views
0

我为我的应用程序创建了一个简单的插件系统,现在我想在一个新线程中运行每个插件。
这里是我的代码的一部分:从新线程中的另一个模块运行一个函数?

def newThread(self, f, args=()): 
     t = threading.Thread(target=f, args=args) 
     t.deamon = True 
     t.start() 
     return t 

print "s" 

for mod in imported_modules: 
    if 'init' in vars(mod): 
     newThread(mod.init, None) 

print 1 

我的一个插件是在插座上监听TCP服务器。如果我在主线程中运行它,应用程序不会加载其他插件并等待服务器停止!
另外上面的代码不会在我的插件上运行init函数。
现在的问题是:
如何在新线程中调用外部函数?
在此先感谢!

+0

在CPython中的线程已知有缺陷。如果您包含一些能够证明您遇到问题的代码,那将会很有帮助。 – NPE 2013-04-06 07:23:32

+0

我不明白。你不能在一个单独的线程中运行你的TCP服务器吗? – freakish 2013-04-06 07:23:59

+0

@freakish tcp服务器没关系! 'newThread'不能从另一个模块运行一个功能 – 2013-04-06 07:26:09

回答

0

问题是,当我们试图创建一个新线程时,我们应该将args传递给我们想在新线程中调用它的方法。如果它没有得到任何参数,我们应该通过它像这样的一个空元组:

newThread(mod.init,()) 
相关问题