Thread基础

继承线程类:

import threading
import time

class CodingThread(threading.Thread):
    def run(self):     # 继承线程,重写run方法
        for x in range(3):
            print('aaaaaa %s'%threading.current_thread()) 
            # threading.current_thread() 查看当前线程信息
            time.sleep(1)

class DrawingThread(threading.Thread):
    def run(self):
        for x in range(3):
            print('bbbbbbbb %s'%threading.current_thread())

def main():
    t1 = CodingThread()
    t2 = DrawingThread()

    t1.start()
    t2.start()

if __name__=='__main__':
    main()        

两个线程的VALUE同时进行+1的操作,当数量多大时,结果会出现误差,加锁可以防止误差。
# 多线程都是在同一个进程中运行的。因此在进程中的全局变量所有线程都是可共享的。线程执行的顺序是无序的,可能造成数据错误。

import threading

VALUE = 0

gLock = threading.Lock()

def add_value():
    global VALUE
    gLock.acquire() # 加锁 (只需要对被修改的全局变量加锁,访问全局变量不需要加锁)
    for x in range(1000000):
        VALUE += 1
    gLock.release() # 释放
    print(VALUE)

def main():
    for x in range(2):
        t = threading.Thread(target=add_value)
        t.start()

if __name__=='__main__':
    main()

 

posted @ 2020-06-18 23:00  酸菜泡饭  阅读(129)  评论(0编辑  收藏  举报