繁体   English   中英

如何用一个对象同时运行两个功能?

[英]How to run two functions at the same time with an object?

所以我发现一个例子,显示

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()

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

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

我认为这是最简单的选择。

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()

使用lambda或局部函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM