Python小推车python学习

Python学习打call第三十八天:线程

2019-03-13  本文已影响10人  暖A暖

1.什么是线程

2.如何定义线程

threading.Thread(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None);

3.如何使用线程

# 示例1:
import threading
def worker():
    print('I am worker')
thead_obj = threading.Thread(target=worker, name='worker')
thead_obj.start()
# 示例1:死循环,会一直执行
import threading
import time

def worker():
    while True:
        time.sleep(1)
        print('我在工作')
    else:
        print('执行完毕')
thread_obj = threading.Thread(target=worker, name='worker')
thread_obj.start()

# 示例3:条件不满足时,程序会执行完毕
import threading
import time
def worker():
    number = 10
    while number:
        time.sleep(1)
        print('我在工作')
        number -= 1
    else:
        print('执行完毕')
thread_obj = threading.Thread(target=worker, name='worker')
thread_obj.start()


# 示例4:参数传递
import threading
import time
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('我在工作')
        number -= 1
    else:
        print('执行完毕')
thread_obj = threading.Thread(target=worker, name='worker', args=(3,))
thread_obj.start()
# 实例5:线程的threading模块的相关函数
import threading
import time
def showInfo():
    print('active_thread_count = {}'.format(threading.active_count()))
    print('current_thread = {}'.format(threading.current_thread()))
    print('enumerate = {}'.format(threading.enumerate()))
    print('main_thread = {}'.format(threading.main_thread()))
    print('get_ident = {}'.format(threading.get_ident()))
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('我在工作')
        number -= 1
    else:
        print('执行完毕')
if __name__ == '__main__':
    thread_obj = threading.Thread(target=worker, name='worker', args=(5, ))
    thread_obj.start()
    showInfo()

# 示例6:线程实例对象的方法
import threading
import time
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('我在工作')
        number -= 1
    else:
        print('执行完毕')
if __name__ == '__main__':
    thread_obj = threading.Thread(target=worker, name='worker', args=(5, ))
    thread_obj.start()
    print(thread_obj.name)
    thread_obj.name = 'new worker'
    print(thread_obj.name)
    print(thread_obj.ident)
    print(thread_obj.is_alive())

4.线程start方法和run方法的区别

import threading
import time
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('我在工作')
        number -= 1
    else:
        print('执行完毕')
if __name__ == '__main__':
    thread_obj = threading.Thread(target=worker, name='worker', args=(5, ))
    thread_obj.start()
    # thread_obj.run()
    print(thread_obj.name)
    thread_obj.name = 'new worker'
    print(thread_obj.name)
    print(thread_obj.ident)
    print(thread_obj.is_alive())

5.什么是线程安全

6.如何确保线程安

7.daemon线程和非daemon线程

import threading
import time
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('{}在工作'.format(threading.current_thread().name))
        number -= 1
    else:
        print('执行完毕')
if __name__ == '__main__':
    thread_obj = threading.Thread(target=worker, name='worker', args=(5, ), daemon=False)
    # thread_obj = threading.Thread(target=worker, name='worker', args=(5,), daemon=True)
    thread_obj.start()
    time.sleep(3)
    print('主线程执行完毕')

8.线程实例的join方法

import threading
import time
def worker(num):
    number = num
    while number:
        time.sleep(1)
        print('{}在工作'.format(threading.current_thread().name))
        number -= 1
    else:
        print('执行完毕')
if __name__ == '__main__':
    #
    thread_obj = threading.Thread(target=worker, name='worker', args=(5,), daemon=True)
    thread_obj.start()
    thread_obj.join()  # 主线程在此处开始阻塞
    print('主线程执行完毕')

9.timer定时器

threading.Timer(self, interval, function, args=None, kwargs=None)可以创建一个定时任务

import threading
from threading import Timer
def worker():
    print('I am worker !')
# 等3秒后只需
timer = Timer(interval=3, function=worker, )
# 给定时器取名
timer.setName('worker timer')
timer.start()
print(threading.enumerate())

参考:https://www.9xkd.com/user/plan-view.html?id=4246838014

上一篇 下一篇

猜你喜欢

热点阅读