是否可以在Thread调用中使用内联函数?

时间:2016-02-06 18:11:29

标签: python multithreading

threading.Thread(target=...)的文档说明了

  

target是run()方法调用的可调用对象。   默认为None,表示不调用任何内容。

我通常会这样使用它:

import threading

def worker():
    a = 3
    print("bonjour {a}".format(a=a))

threading.Thread(target=worker).start()

有没有办法将target中的函数元素链接起来,以便不需要定义新的元素?类似的东西(显然是伪代码)

threading.Thread(target=(a=3;print("bonjour {a}".format(a=a))).start()

我在Thread调用中进行了一系列非常短的调用,并且希望避免函数定义的增加。

2 个答案:

答案 0 :(得分:8)

您可以在Python 3.x中使用lambda函数

import threading

threading.Thread(target=lambda a: print("Hello, {}".format(a)), args=(["world"]))

你应该看看this SO question,看看为什么你不能在lambda表达式的Python 2.x中使用print

实际上,你可以在你的lambda中适应许多函数调用:

from __future__ import print_function # I'm on Python 2.7
from threading import Thread

Thread(target=(lambda: print('test') == print('hello'))).start()

这将同时打印testhello

答案 1 :(得分:2)

我不是非常喜欢使用exec,但在Python3.x中它是一个函数,所以你可以

threading.Thread(target=exec, args=('a=3; print("bonjour {a}".format(a=a))',)