python多任务(一)—— 线程

Python实现多任务(1)#

线程

在远古时代,大多都是单核CPU,想要完成多任务,采用的方式是时间片轮转。简单地说就是任务轮换,比如两个任务,分别让他们执行0.001秒。

通过threading模块完成多线程

import time
import threading

def sing():
for i in range(5):
    print("* * *singing* * *")
    time.sleep(1)

def dance():
for i in range(5):
    print("* * *dancing* * *")
    time.sleep(1)

def start_thread():
target1 = threading.Thread(target=sing)
target2 = threading.Thread(target=dance)
target1.start()       #创建线程
target2.start()

while True:
    length = len(threading.enumerate())
    print("当前线程数:%d " % length)

    if length <= 1:
        break
    time.sleep(0.5 )

if __name__ == '__main__':

	start_thread()

由于线程共享全局变量,在外部定义全局变量时,就会出现多个线程抢占资源的问题,这时候就需要对单个线程上锁,在执行操作前上锁。

import threading
import time

#全局变量  线程之间容易出现资源竞争
g_num = 0

def test1(nums):
global g_num
#如果没有上锁则成功,如果已上锁则阻塞
for i in range(nums):
    mutex.acquire()
    g_num += 1
    mutex.release()
	print("这是 线程1 的 num = %s   " % str(g_num))

def test2(nums):
 	global g_num
	for i in range(nums):
    	mutex.acquire()
    	g_num += 1
    	mutex.release()
    print("这是 线程2 的 num = %s   " % str(g_num))
    
mutex = threading.Lock()

def main():
 	t1 = threading.Thread(target=test1, args=(1000000,))
	t2 = threading.Thread(target=test2, args=(1000000,))

t1.start()
t2.start()
time.sleep(3)

print("这是 主线程的 num = %s   "% str(g_num))

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值