Python 关于线程和回调
有一段时间我正在使用Python和线程,但我仍然对回调有点怀疑。以下面的代码为例:Python 关于线程和回调,python,multithreading,thread-safety,Python,Multithreading,Thread Safety,有一段时间我正在使用Python和线程,但我仍然对回调有点怀疑。以下面的代码为例: import threading def cb_func(data): """The callback function""" print data def th_func(callback): """The threaded function""" # do some work here callback('somedata') thr = threading.Th
import threading
def cb_func(data):
"""The callback function"""
print data
def th_func(callback):
"""The threaded function"""
# do some work here
callback('somedata')
thr = threading.Thread(target=th_func, args=(cb_func,)).start()
现在,根据这段代码,函数cb_func将在主线程中运行,还是在新创建的(thr)线程中运行?我这样问是因为我使用的是GUI工具包(GTK),在以这种方式调用回调时,偶尔会出现X个错误(和SEGFULTS)(是的,我知道gobject.idle_add)
提前感谢您,并为我的愚蠢问题感到抱歉。有一种简单的方法可以使用
当前线程()进行检查。name
:
import threading
def cb_func():
"The callback function."
print 'Callback, in thread %s' % threading.current_thread().name
def th_func(callback):
"The threaded function."
# ...
callback()
thr = threading.Thread(target=th_func, args=(cb_func,)).start()
运行此打印(对于我来说,在Ubuntu 11.04、python 2.7.1上):
换句话说,回调在新创建的线程中运行。您被glib和线程搞得一团糟:
- 在您的示例中,
/回调
将在与cb_func
相同的线程中调用。因为你在打直拨电话th_func
- 使用glib和
,您正在安排一个将在glib主循环中发生的调用。调用是间接的:函数不会在执行idle\u all时立即调用,而是稍后调用glib.idle\u add
Callback, in thread Thread-1`