Python 多线程编程

import threading
import time
g_nums = [11, 22]
g_num = 0
# 创建一个互斥锁,默认是没有上锁的
mutex = threading.Lock()

def test1():
    for i in range(5):
        print("test1------%d------" % i)
        time.sleep(1)

def test2():
    for i in range(5):
        print("test2------%d------" % i)
        time.sleep(1)

def test3(temp):
    temp.append(33)
    print(temp)

def test4():
    global g_num
    # 上锁,如果之前没有被上锁,那么此时 上锁成功
    # 如果上锁之前 已经被上锁了,那么此时会堵塞在这里,直到 这个锁被解开为止
    mutex.acquire()
    for i in range(1000000):
        g_num += 1
    # 解锁
    mutex.release()
    print(g_num)

def test5():
    global g_num
    mutex.acquire()
    for i in range(1000000):
        g_num += 1
    mutex.release()
    print(g_num)

def main():
    t1 = threading.Thread(target=test1)
    t2 = threading.Thread(target=test2)
    # args指定将来调用 函数的时候 传递什么数据过去
    t3 = threading.Thread(target=test3, args=(g_nums,))
    t4 = threading.Thread(target=test4)
    t5 = threading.Thread(target=test5)
    t1.start()
    t2.start()
    t3.start()
    t4.start()
    t5.start()
    # 可以打印当前程序有多少个线程(下面调用返回一个列表)
    print(threading.enumerate())
    time.sleep(5)
    print(g_num)

if __name__ == '__main__':
    main()

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。