一.多线程
1.进程是多个资源的集合。
2.线程是就是进程里面具体干活的。
3.线程和线程之间是互相独立的。
4.如果多线程运行函数,需要把线程放到字典里,否则函数拿不到返回值
import threading
def down_load():
print('完毕!')
for i in rang(5):
t = threading.Thread(target=down_load,args=(url,)) # 如果函数里有多个参数,那么需要加args字段
t.start()
print(threading.activeCount()) #查看当前线程数
print(threading.current_thread()) #查看当前线程
二.线程池
pool = threadpool.ThreadPool(20) #实例化一个线程池
reqs = threadpool.makeRequests(down_load_pic,url_list) #分配数据
[pool.putRequest(req) for req in reqs]
# for req in reqs:
# pool.putRequest(req)
print(threading.activeCount())
pool.wait() #等待
print('end')
三.锁
多个线程操作同一个数据的时候,就得加锁
import threading
lock = threading.Lock() #申请一把锁
lock.acquire() #加锁
lock.release() #解锁 #如果不解锁就会变成死锁
# with lock: 简写,用with也会帮你加锁,解锁
四.多进程
import multiprocessing,time
def down_load():
time.sleep(2)
print("运行完了")
if __name__ == '__main__': # win下需要加这个函数,否则报错
for i in range(5):
p = multiprocessing.Process(target=down_load)
p.start()
while len(multiprocessing.active_children())!=0: #等待子进程结束
pass
print(multiprocessing.current_process())
print('end')