2017-08-05 66 views
0

所以我发现,显示如何用对象同时运行两个函数?

import threading 
from threading import Thread 

def func1(): 
    print 'Working' 

def func2(): 
    print 'Working' 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 

和工作的实例。

但是,当我通常有一个对象的功能时它是如何工作的。 以下是我通常使用的2个功能。

statusbar() 
copyfrom(servername.strip()) 

如何将servername.strip()添加到下面?

Thread(target = statusbar).start() 
Thread(target = copyfrom).start() 
+0

Ping @Prox查看是否已解决。 – SwiftsNamesake

回答

1

target应该是一个函数,所以定义你自己的功能那你想要做什么:

def doSomething(): 
    copyfrom(servername.strip()) 

,并把它交给你的Thread

Thread(target=doSomething).start() 

如果你想这样做在一个单一的线,你可以使用匿名函数:

Thread(target=lambda: copyfrom(servername.strip())).start() 

由于cᴏʟᴅsᴘᴇᴇᴅ提到了他的答案,你也可以指定回调参数作为元组:

Thread(target=copyfrom, args=(servername.strip(),)).start() 
0

使用lambda或本地函数:

Thread(target = lambda: copyfrom(servername.strip())).start() 

def thread_func(): 
    copyfrom(servername.strip()) 
Thread(target = thread_func).start() 

在Python中可以定义功能函数(本地函数,拉姆达也的种类),以及内部功能可以从它的名称访问的父功能。即使在执行后留下原始功能 请记住,这将延长父项功能中对象的生存期。所以:

def foo(): 
    s = '... very long string ...' 
    def substr(a, b): 
    return s[a:b] 
    return substr 
a = foo() 

现在你可以使用a访问s。但只要a存在,s也将作为a继续参考substr,它继续参考s

2

您可以将参数传递给threading.Thread,所以这应该工作:

Thread(target=statusbar).start() 
Thread(target=copyfrom, args=(servername.strip(),)).start() 

这一点,在我看来,最简单的选择。

+0

这个特定用例的好答案。 – SwiftsNamesake