遇到个有趣的事情
Topic sourceimport time,threading
money = 0
def change_it(n): global money money = money + n money = money - n print('当前进程是:%s,当前money:%s,当前n:%s' %(threading.current_thread().name,money,n))
def run_thread(n): for i in range(100000): change_it(n)
t1 = threading.Thread(target=run_thread,args=(5,),name='t1') t2 = threading.Thread(target=run_thread,args=(8,),name='t2') t1.start() t2.start() t1.join() t2.join() print(money)
当函数本身的操作很少时,print()操作的耗时不能忽略 猜测是print()操作的耗时已经明显大于cpu调度时间片,所以不会出现对余额的临时变量错误计算 没有经过代码测试,只是因为之前写多线程任务时print()日志导致耗时上千倍增加,由此猜测
- 1
Shadow_Tiy
平台:Windows 10 Python 3.7 VScode 那个多进程变量程序里在change_it(n)函数加一句打印输出当前进程信息,当前的balance,当前进程名,当前n后,balance最后并没有出错,即使是进行了10万次修改。 而且如果把print注释掉,最后的balance又会出错