Python 3中的thread.start_new_thread发生了什么?

33

我喜欢将函数转换为线程的能力,无需不必要地定义类。我知道关于_thread,但似乎不应使用_thread。对于Python 3是否有thread.start_new_thread的最佳实践替代方法?

2个回答

50
threading.Thread(target=some_callable_function).start()

或者如果您希望传递参数,

threading.Thread(target=some_callable_function,
        args=(tuple, of, args),
        kwargs={'dict': 'of', 'keyword': 'args'},
    ).start()

我正在使用方法2将一个参数传递给线程,并且出现了错误:argument after * must be sequence, not it。你知道这是什么意思吗? - lemiant
11
请确保传递的是(firstarg,)而不是(firstarg),请记住单元素元组需要加上尾随逗号才能被解释为元组。 - Amber
可调用方法的签名应该是什么样子?如果我使用类似callable(**kwargs):这样的东西,我会得到TypeError: callable() takes 0 positional arguments but 1 was given,如果我使用callable(kwargs):,我会得到TypeError: callable() got an unexpected keyword argument 'raw' - henrikstroem
1
线程.Thread(目标=可调用,kwargs = kwargs) - Smart Manoj

5

很不幸,没有直接的等价物,因为Python 3旨在比Python 2更具可移植性,而_thread接口被视为太低级了。

在Python 3中,通常最好的做法是使用threading.Thread(target=f...)。这种方法使用不同的语义,但是它更受欢迎,因为接口更易于移植到其他Python实现上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接