在python中使用线程的全局变量

时间:2015-07-29 05:08:28

标签: python multithreading python-multithreading

通过在此代码中对进程进行线程化:

import threading
import time

def loop():
    global bbcount
    bbcount = 0
    while True:
        bbcount += 1
        print "This is a Loop"
        time.sleep(1)

if __name__ == '__main__':

    t = threading.Thread(target=loop)
    t.start()
    while True:
        user_input = raw_input("Please enter a value:")
        print "User input: " + user_input
        print "Current count: " + str(bbcount)
    t.join()

通过尝试打印部分更新/增加的内存空间同时增加循环次数,我是否冒着bbcount被破坏的风险?

阅读后我想到了这个: 由于进程的所有线程共享相同的全局变量,因此同步访问全局变量会出现问题。例如,假设你有一个全局变量X和两个线程A和B.假设线程A和B只会增加X的值。当线程A开始执行时,它复制值将X放入寄存器并递增它。在它有机会将值写回内存之前,该线程被暂停。下一个线程启动,读取第一个线程读取的X的相同值,将其递增并将其写回内存。然后,第一个线程完成执行并将其值从寄存器写回内存。在这两个线程完成之后,X的值增加1而不是2,正如您所期望的那样。

来自:http://www.linuxjournal.com/article/3138

1 个答案:

答案 0 :(得分:0)

由于GIL,这个程序预计会运行。

有关GIL的更多信息:https://en.wikipedia.org/wiki/Global_Interpreter_Lock

因此全局变量将在短时间内进行线程安全编辑。