python学习第九天————实现多任务之线程

1.线程:执行多任务的简单方法。使用时要导入threading模块,通过threading的Thread类创建对象实例,调用start()方法调用操作系统提供的函数完成多任务,线程从创建对象的target=函数名处开始执行,执行结束后线程结束,不同线程执行顺序不确定。

import threading
import time
def sing():
    for i in range(5):
        print("lalala")
        time.sleep(1)
def dance():
    for i in range(5):
        print("一起跳舞")
        time.sleep(1)
def main():
    t1 = threading.Thread(target=sing)
    t2 = threading.Thread(target=dance)
    t1.start()
    t2.start()
if __name__ == "__main__":
    main()

2.多线程共享全局变量

import threading
import time
def test1(temp):
    temp.append(33)
    print("--------in test1 temp=%s---------"%str(temp))

def test2(temp):
    print("--------in test2 temp=%s---------" %str(temp))
g_nums = [11,22]
if __name__ == "__main__":
    #target指明了这个线程将来去那个函数执行代码
    #args指明了传递给函数的值
    t1 = threading.Thread(target=test1,args=(g_nums,))
    t2 = threading.Thread(target=test2,args=(g_nums,))
    t1.start()
    time.sleep(1)
    t2.start()
    time.sleep(1)
    print("-------- g_num=%s---------" % str(g_nums))

输出结果:

--------in test1 temp=[11, 22, 33]---------
--------in test2 temp=[11, 22, 33]---------
-------- g_num=[11, 22, 33]---------

3.为解决多线程抢夺资源,创建互斥锁

import threading
import time
g_num = 0
def test1(temp):
    global g_num
    #锁定,如果在此之前未被锁定,那么上锁成功
    #如果在此之前被锁定,那么此时被堵塞在这里,知道解锁
    metux.acquire()
    for i in range(temp):
        g_num += 1
    #解锁
    metux.release()
    print("--------in test1 g_num=%d---------"%g_num)

def test2(temp):
    global g_num
    metux.acquire()
    for i in range(temp):
        g_num += 1
    metux.release()
    print("--------in test2 g_num=%d---------" %g_num)
#创建互斥锁,默认没有上锁
metux = threading.Lock()
if __name__ == "__main__":
    #target指明了这个线程将来去那个函数执行代码
    #args指明了传递给函数的值
    t1 = threading.Thread(target=test1,args=(10000,))
    t2 = threading.Thread(target=test2,args=(10000,))
    t1.start()
    t2.start()
    time.sleep(5)
    print("-------- g_num=%d---------" %g_num)

输出结果:

--------in test1 g_num=10000---------
--------in test2 g_num=20000---------
-------- g_num=20000---------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值