美文网首页
多线程与线程

多线程与线程

作者: 苗_a | 来源:发表于2018-10-09 10:41 被阅读5次

    Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的模块,用于更底层的操作,一般应有级别的开发不常用。后者则封装了更多高级的接口

    coding=utf-8

    import threading
    import time

    def saySorry():
    print("亲爱的,我错了,我能吃饭了吗?")
    time.sleep(1)

    if name == "main":
    for i in range(5):
    t = threading.Thread(target=saySorry)
    t.start() #启动线程,即让线程开始执行
    from threading import Thread
    import time

    g_num = 100

    def work1():
    global g_num
    for i in range(3):
    g_num += 1

    print("----in work1, g_num is %d---"%g_num)
    

    def work2():
    global g_num
    print("----in work2, g_num is %d---"%g_num)

    print("---线程创建之前g_num is %d---"%g_num)

    t1 = Thread(target=work1)
    t1.start()

    延时一会,保证t1线程中的事情做完

    time.sleep(1)

    t2 = Thread(target=work2)
    t2.start()
    队列
    生产消费者模型主要是对队列进程操作,贴心的Python为我们实现了一个队列结构,队列内部实现了锁的相关设置。可以用队列重写生产消费者模型。
    from threading import Thread, Lockimport timeg_num = 0def test1(): global g_num for i in range(1000000): #True表示堵塞 即如果这个锁在上锁之前已经被上锁了,那么这个线程会在这里一直等待到解锁为止 #False表示非堵塞,即不管本次调用能够成功上锁,都不会卡在这,而是继续执行下面的代码 mutexFlag = mutex.acquire(True) if mutexFlag: g_num += 1 mutex.release() print("---test1---g_num=%d"%g_num)def test2(): global g_num for i in range(1000000): mutexFlag = mutex.acquire(True) #True表示堵塞 if mutexFlag: g_num += 1 mutex.release() print("---test2---g_num=%d"%g_num)#创建一个互斥锁#这个所默认是未上锁的状态mutex = Lock()p1 = Thread(target=test1)p1.start()p2 = Thread(target=test2)p2.start()print("---g_num=%d---"%g_num)
    运行结果:

    ---g_num=61866---
    ---test1---g_num=1861180
    ---test2---g_num=2000000

    相关文章

      网友评论

          本文标题:多线程与线程

          本文链接:https://www.haomeiwen.com/subject/cjqeaftx.html