python多线程

2019-11-30  本文已影响0人  Dxes

一个进程中默认有且只有一个线程,这个线程叫主线程,默认情况所有的代码都在主线程中执行进程中主线程以外的线程叫子线程
1.怎么让让进程拥有子线程
在进程中创建threading模块中的Thread类或Thread类的子对象。
2.程序(进程)结束
只有进程中的线程都结束了进程才会结束
线程怎么结束:线程中任务执行完成,线程才会被销毁

from datetime import datetime
import time
from threading import *

def download(film_name: str):
    print('%s开始下载:%s' % (film_name, datetime.now()))
    for _ in range(5):
        time.sleep(1)
        # 不断下载数据
        if flag:
            return
    print('%s下载结束: %s' % (film_name, datetime.now()))
# download('暮光之城')
# download('两只老虎')
# download('海上钢琴师')

# 1.创建线程对象 - 子线程

线程对象 = Thread(target=函数,args= 元组)
说明:target - 函数,需要在子线程中执行的任务(会在子线程中调用)
args - target对应的函数在调用的时候传的参数

t1 = Thread(target=download, args=('暮光之城',))

t2 = Thread(target=download, args=('两只老虎',))
t3 = Thread(target=download, args=('海上钢琴师',))

2.让子线程执行子线程中的任务
线程对象.start() -在子线程中调用target对用的函数,并且将args中的元素作为参数。
t1.start()
删除线程的引用不会让线程销毁
t2.start()
t3.start(0
获取当前运行的线程数量
activ_count()
获取当前正在运行的所有的线程对象

for x in enumerate():
      print(x)

from threading import *
from datetime import datetime
import time


class DownThread(Thread):

    def __init__(self, film_name):
        super().__init__()
        self.film_name = film_name

    # 这个run方法是会在子线程中自动调用的方法,要求除了self以外不能有其它参数
    def run(self) -> None:
        print('%s开始下载:%s' % (self.film_name, datetime.now()))
        time.sleep(5)
        print('%s下载完成:%s' % (self.film_name, datetime.now()))


t1 = DownThread('卧虎藏龙')
t2 = DownThread('让子弹飞')
t3 = DownThread('五十度灰')

# 在子线程中执行下载操作
t1.start()
t2.start()
t3.start()
# 正在主线程中执行下载操作
# t1.run()
# t2.run()
# t3.run()
from threading import *
from datetime import datetime
import time
from random import randint



# 1.join
"""
线程对象.join()
其他代码

这儿的其他代码会在线程对象中的任务执行完成后才执行
"""
def download(film_name: str):
    print('%s开始下载:%s' % (film_name, datetime.now()))
    time.sleep(randint(3, 7))
    print('%s下载结束:%s' % (film_name, datetime.now()))


t1 = Thread(target=download, args=('暮光之城',))
t2 = Thread(target=download, args=('两只老虎',))
t3 = Thread(target=download, args=('百团大战',))

# 需求一:所有电影都下载之后打印’所有电影下载完成‘

# t1.start()
# t2.start()a
# t3.start()
#
# t1.join()
# t2.join()
# t3.join()
# print('所有电影下载完成')

# 需求二:要求暮光之城和两只老虎下载完成(同时下载)后才下载海上钢琴师
t1.start()
t2.start()

t1.join()
t2.join()
print('======')
t3.start()
上一篇 下一篇

猜你喜欢

热点阅读