DAY18总结

day18多线程

  • 每个进程默认有一个线程,其他的是子线程
  • Thread类:创建线程对象:Thread(target, args,kwargs)
    • target:函数,需要在当前线程创建的子线程中去调用的函数
    • args/kwargs:调用target中函数需要的实参列表
  • 开始执行子线程的任务:线程对象.start();通过start方法在子线程中调用target对应的函数
  • 一个进程中如果有多个线程,程序会在所有的线程都结束的时候才结束;发生异常崩溃指的是线程崩溃而不是进程
  • 创建线程的两种方法:
from threading import Thread, currentThread, current_thread
import time
import datetime

# 方法一
def download(file_name):
    print('%s downloading....' % file_name)
    print(datetime.datetime.now())
    time.sleep(5)
    print('%s download ok' % file_name)
    print(datetime.datetime.now())


t1 = Thread(target=download, args=('复联',))
t2 = Thread(target=download, args=('007',))
t1.start()
t2.start()
print('主线程')


# 方法二
class MyThread(Thread):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):  # 在子线程中执行的方法
        print(current_thread().getName())

for i in range(1,6):
    t = MyThread('线程%s' % i)
    t.start()
  • 子线程崩溃不会影响主线程或者其他子线程的执行
  • join()方法:如果希望某个任务是在某个线程结束后才执行,那就将这个任务的代码放在对应线程对象调用join方法的后面
  • 线程锁:from threading import Lock;当多个线程对同一个数据进行操作时,需要使用线程锁来保证这个数据的安全
from threading import Lock

mutex = Lock()

mutex.acquire()  # 加锁
mutex.release()  # 解锁

# 1.保证每个数据对应一个锁对象
# 2.操作数据前加锁,数据操作完成后释放锁
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你进了一个女生宿舍,你看见A女生桌子特别干净东西摆着整整齐齐,B女生桌子上乱七八糟。你调侃B女生几句,嘿你看人...
    a8279cbde692阅读 230评论 0 2
  • 你的心不会痛吗? 只有到了深夜,可以反省的时间,才会发现自己心很痛。睡不着,想很多。 我想起从前的自己,渴望独立长...
    海里的鲨鱼阅读 222评论 0 0
  • This is a very simple and fun game. Players need to cut t...
    逍遥alan阅读 90评论 0 0
  • 下班的时候和同事顺路,然后聊着天,聊着聊着聊到了婚姻,他说他堂妹今年17岁怀孕了准备结婚,我愣了一下,17岁真的太...
    凯哥哥卡机嘛阅读 376评论 0 1
  • 当语言枯竭、思维枯竭、情感枯竭时,那就把身心投入到生动的自然、丰富的社会、厚重的历史、浩瀚的书籍中去,在客观的自然...
    CQD日记阅读 140评论 0 2