python多线程,多进程,线程传参,守护线程,锁

进程
一个程序,它是一组资源的集合
一个进程里面默认是有一个线程的,主线程
多进程是可以利用多核cpu的
线程
最小的执行单位
线程和线程之间是互相独立的
主线程等待子线程执行结束
线程和线程之间,数据是共享的。

import threading
import time

def cook():
    print('做饭')
    time.sleep(1)

def xiyifu():
    print('洗衣服')
    time.sleep(3)

def xiwan():
    print('洗碗')
    time.sleep(2)

start_time = time.time()
t = threading.Thread(target=cook)#线程实例化,target=函数名,默认程序自身是一个主线程t,t2,t3是三个子线程
t2 = threading.Thread(target=xiyifu)
t3 = threading.Thread(target=xiwan)

t.start()#启动线程
t2.start()
t3.start()

t.join()#主线程等待子线程结束
t2.join()
t3.join()
end_time = time.time()#end_time实际是主线程的执行时间
print(end_time - start_time)
# print(threading.active_count()) #查看当前有几个线程,threading.active_count()

守护线程:
只要主线程执行完成,不管子线程有没有执行完成,全部都结束
python的多线程是利用不了多核cpu的

import threading
import time
import random
def talk(name):
    print('正在和%s聊天'%name)
    time.sleep(random.randint(1,5))
    print('和%s聊完了'%name)

t = threading.Thread(target=talk,args=['尹路明'])
# t.setDaemon(True) #设成守护线程
t.start()

t = threading.Thread(target=talk,args=['刘海洋'])
# t.setDaemon(True) #设成守护线程
t.start()

t = threading.Thread(target=talk,args=['方丹'])
# t.setDaemon(True) #设成守护线程
t.start()

t = threading.Thread(target=talk,args=['代爽'])
t.setDaemon(True) #设成守护线程
t.start()

print('退出qq')

导数据程序+线程传参方法

import threading
import time
import random

result_list = []
def export_data(db,excel):
    print(threading.current_thread())#当前是哪个线程在运行,threading.current_thread()
    print('export_data',db,excel)
    time.sleep(random.randint(1,5))#随机睡1到5秒
    result_list.append(random.randint(1,5))#函数有返回值,且我们想拿到返回值的方法:定义一个list,把想要的返回值加到list中,例如:random.randint(1,5)就是我们想要的返回值


thread_list = []
for i in range(10):
    t = threading.Thread(target=export_data,args=['db1','测试用例.xls'])#target要执行的函数,args函数传参
    thread_list.append(t)#执行的线程加到list中,能看到当前一共执行了哪些线程
    t.start()

while threading.active_count() != 1:#判断当前线程数不等于1,就一直循环,一直导数据
    pass

print('数据都导完了')

import threading

count = 0
lock = threading.Lock()#定义锁
def add():
    global count
    # print(threading.current_thread(),'开始运行')#threading.current_thread(),当前运行的线程
    for i in range(1000000):
#方法一:
        # lock.acquire()  # 加锁
        # count +=1
        # lock.release()#解锁
#方法二:
        with lock:#with lock可以自动加锁,解锁
            count+=1

for i in range(2):
    t = threading.Thread(target=add)
    t.start()

while threading.active_count()!=1:
    pass

print(count)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值