zoukankan      html  css  js  c++  java
  • 线程+创建线程的两种方式+线程对象及其他方法+守护线程

    """
    进程:资源单位
    线程:执行单位

    进程就类似于是一个工厂
    而线程就是工厂里面的一条条的流水线


    每一个进程中都自带一个线程,至少有一个线程
    同一个进程下 多个线程数据是共享的(*****)
    进程自带的那个线程我们会人为的叫它 主线程
    但是同一个进程下 多个线程没有主次之分

    开启线程的开销 远远小于开启进程的开销
    开进程
    1.申请内存空间
    2.执行代码
    开线程
    上面的两个都没有
    """



    #创建线程  第一种方式
    from threading import Thread
    import time


    def task(name):
    print('%s is running' % name)
    time.sleep(3)
    print('%s is end' % name)

    t = Thread(target=task,args=('jason',))
    t.start() # 创建线程 这句话一运行完 线程几乎就已经创建完毕了
    print('主')
    # ##这个创建一个线程,这个也是异步执行的,方法和之前的创建进程的方式一模一样,只不过是使用的模块不一样罢了
    #有一点不同,创建进程需要将那个创建的代码放到 if file_name == __main__: 下面去,而创建线程是不需要的



    # 第二种方式
    from threading import Thread
    import time
    class MyThread(Thread):
    def __init__(self,name):
    super().__init__()
    self.name = name
    def run(self):
    print('%s is running' % self.name)
    time.sleep(3)
    print('%s is end' % self.name)
    t = MyThread('jason')
    t.start()
    print('主')



    # 同一个进程下多个线程数据是共享
    #一旦有一个线程将某个数据修改了,那么其他线程看到的数据也是修改之后的值
    from threading import Thread,active_count
    import os
    import time

    money = 10


    def task():
    global money
    money = 0
    print(os.getpid())
    time.sleep(1)


    t = Thread(target=task)
    t.start()
    print("money的值是:",money)
    t.join()
    print("money 的值是:",money)


    print(active_count()) # 统计当前进程下 存活的线程数
    print(os.getpid())
    print('主')

    """
    主线程一定要等待所有子线程的结束才会结束
    因为主线程一旦结束意味着整个进程的结束,那么会造成子线程无法正常运行
    """


    from threading import Thread,current_thread
    import time


    def task1():
    print('%s is running' % current_thread().name)
    time.sleep(3)
    print('%s is end' % current_thread().name)

    def task2():
    print(" %s is running " % current_thread().name)
    time.sleep(4)
    print("%s is end " % current_thread().name)


    t1 = Thread(target=task1)
    t2 = Thread(target=task2)
    t2.daemon = True
    t1.start()
    t2.start()
    print('主')
    """
    同一个进程下
    主线程会等待所有非守护线程的结束才会结束
    主线程结束之后,守护的线程不管有没有执行完,都立刻结束,直接停止运行

    所以上面的代码执行的结果是:
    Thread-1 is running
    Thread-2 is running

    Thread-1 is end

    因为线程2的延迟时间是4秒,而且被作为了守护线程,当非守护线程线程1结束,主线程也就结束了
    这个时候,守护线程2还没有结束,但是也必须直接停止.所以它的那个Thread-2 is end 是没有打印出来的

    """
    print('===================================================')

    from threading import Thread
    from multiprocessing import Process
    import time
    def foo():
    print(123)
    time.sleep(3)
    print("end123")
    def bar():
    print(456)
    time.sleep(1)
    print("end456")
    if __name__ == '__main__':
    t1 = Thread(target=foo)
    t2 = Thread(target=bar)
    t1.daemon = True
    t1.start()
    t2.start()
    print("main-------")
  • 相关阅读:
    Java访问Oracle服务器
    easyUI之练习
    easyUI之Tree(树)
    easyUI之Messager(消息窗口)
    easyUI之表单
    easyUI之Dialog(对话框窗口)
    easyUI之函数
    easyUI之window窗口
    easyUI之progressbar进度条
    easyUI之slider滑动条框
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11312592.html
Copyright © 2011-2022 走看看