如何使用对象同时运行两个函数?

时间:2017-08-05 05:40:42

标签: python multithreading

所以我找到了一个显示

的例子
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()

这可行。

但是当我通常有一个具有该功能的对象时,它是如何工作的。 这是我通常使用的两个函数。

statusbar()
copyfrom(servername.strip())

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

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

3 个答案:

答案 0 :(得分:2)

您可以将参数传递给threading.Thread,因此这应该有效:

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

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

答案 1 :(得分: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()

答案 2 :(得分:0)

使用lambda或local函数:

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

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

在python中你可以在函数中定义函数(本地函数,lambda也是这种函数),内部函数可以从它的父函数中访问名称。即使执行后仍保留原始功能 请记住,这将延长父母功能中对象的生命周期。所以:

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

相关问题