困成狗,今天完善我的树的时候发现在我的MCTS树里面执行画图plt.show()简直是超级耗时....然后身为资深学渣的我想到了靠多线程处理这个....
def target():
print ('the curent threading %s is running' % threading.current_thread().name)
print ('the curent threading %s is running11111111' % threading.current_thread().name)
t = threading.Thread(target=target)
t.start()
#t.join()
print ('the curent threading %s is ended11111111111' % threading.current_thread().name)
上面输出:
the curent threading MainThread is running11111111
the curent threading Thread-1 is running
the curent threading MainThread is ended11111111111
由于我们注释掉了t.join(),所以上面的运行是:主线程和子线程交替独立执行。
如果我们把t.join()的注释去掉,那么结果是先打印“the curent threading MainThread is running11111111”,然后执行完target()函数,才又回到主线程去继续执行“the curent threading MainThread is ended11111111111”的。相当于单片机中的中断概念了。
要注意的一点是,target函数不要加(),你会发现如果不小心加了(),t.join()就会“失灵”。
因为在Python中,调用函数时带括号和不带是有区别的:
1、不带括号时,调用的是这个函数本身 ,可能返回的是地址值之类的。
2、带括号(如果需要传入参数就要传,),会执行这个函数,返回的是函数的return结果。
例如:(这是别的博主的代码)
def a(x):
return x
print(a) #不带括号调用的结果:
print(a(3)) #带括号调用的结果:3
然后我发现还是没能解决我的问题....还是卡,可能plt.show()本身就比较慢,之前看到有问题说这个居然运行了200ms......
参考资料