爬虫基础 之多线程基础,面向对象多线程,共享全局变量多线程

tech2022-07-31  135

1.多线程基础:

import time import threading #传统方式 # def eating(): # for x in range(3): # print("%s正在吃饭" % x) # time.sleep(1) # # def sleeping(): # for x in range(3): # print("%s正在睡觉" % x) # time.sleep(1) # # def main(): # eating() # sleeping() #排序执行 需要6秒 def eating(): for x in range(3): #查看当前线程的名字 #threading.current_thread() 当前线程的名字 print("%s正在吃饭" % threading.current_thread()) time.sleep(1) def sleeping(): for x in range(3): print("%s正在睡觉" % threading.current_thread()) time.sleep(1) def main(): t1 = threading.Thread(target=eating) t2 = threading.Thread(target=sleeping) t1.start() #开启 t2.start() #节约了一半的时间 3秒 print(threading.enumerate()) #线程数量 if __name__ == '__main__': main()

2.面向对象多线程:

import threading # 通过threading 模块实现多线程 import time class EatingThread(threading.Thread): def run(self): for x in range(3): print("%s正在哈扎啤" % threading.current_thread()) time.sleep(1) class SleepingThread(threading.Thread): def run(self): for x in range(3): print("%s正在睡觉" % threading.current_thread()) time.sleep(1) def main(): t1 = EatingThread() t2 = SleepingThread() t1.start() t2.start() if __name__ == '__main__': main()

3.多线程共享全局变量:

import threading value = 0 gLock = threading.Lock() # threading 提供Lock类 #线程执行顺序 无序 数据容易造成错误 # a线程操作 我们上锁 等到释放锁 #b线程拿到锁 开始执行 def add_Value(): global value #第一个线程开始操作 上锁 gLock.acquire() #线程访问变量的时候 加锁 其它线程就进不来 for x in range(100000): value += 1 gLock.release() #操作完成 释放锁 当前线程处理完成以后 把锁释放了 其它线程才能进来 print('value:%d' % value) def main(): for x in range(2): t = threading.Thread(target=add_Value) t.start() if __name__ == '__main__': main()

万水千山总是情,点个关注行不行。

最新回复(0)