我想使用回调而不是队列来与线程通信。在下面的代码中,MainThread考虑Service线程报告的时间量,并根据该值决定保留还是抛出。
可以在Python中执行此操作吗?此模式的名称是什么?关于线程安全性的任何建议吗?
class Service(threading.Thread):
def __init__(self, cb_obj):
threading.Thread.__init__(self)
self.cb_obj = cb_obj
def run(self):
start = time.time()
time.sleep(1)
stop = time.time()
self.cb_obj.cb(stop - start)
class MainThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
service = Service(self)
service.start()
def cb(self, time_to_completion):
if time_to_completion < 2:
print('keep')
else:
print('throw')
main = MainThread()
main.start()
答案 0 :(得分:0)
可以在Python中执行此操作吗?
这实际上取决于类方法的作用,但我认为不是。
此模式的名称是什么?
这是composition OOP编程的示例。我想。
关于线程安全性的任何建议吗?
在此示例中,这是线程安全性,但是...这只是一个简单的示例。
考虑情况。您需要在主线程中使用2个Service类线程。可能您需要在run
方法中使用while循环,一个Service类将做更多的事情,例如处理文件。使用CPU(while循环)锁定怎么办?
我认为最佳答案取决于情况使用适当的工具。
关于线程here的不错的文章。
您可以在super()
方法中使用__init__
进行继承。