python多线程任务平均分配_python线程threading处理任务并发一

python用多线程处理任务并发情况。thread生命周期:1、创建对象时,代表 Thread 内部被初始化。2、调用 start() 方法后,thread 会开始运行。

3、thread 代码正常运行结束或者是遇到异常,线程会终止。函数表达式:threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

直接创建thread,传递callable(可调用)对象。从输出可以看出,两个任务同时执行。

importthreadingimporttimedeftest():for i in range(5):print('test',i,time.ctime())

time.sleep(1)

thread= threading.Thread(target=test)

thread.start()for i in range(5):print("main",i,time.ctime())

time.sleep(1)

"""output"""test main00 Sun Oct 25 15:07:05 2020Sun Oct25 15:07:05 2020test main11 Sun Oct 25 15:07:06 2020Sun Oct 25 15:07:06 2020test main22 Sun Oct 25 15:07:07 2020Sun Oct25 15:07:07 2020test main33 Sun Oct 25 15:07:08 2020Sun Oct 25 15:07:08 2020test main44 Sun Oct 25 15:07:09 2020Sun Oct25 15:07:09 2020

thread.current_thread() .name返回线程名字

importthreadingimporttimedeftest():for i in range(5):print(threading.current_thread().name+"test",i,time.ctime())

time.sleep(1)

thread= threading.Thread(target=test,name="testthread")

thread.start()for i in range(5):print(threading.current_thread().name+"main",i,time.ctime())

time.sleep(1)

"""output"""testthreadtestMainThreadmain00 Sun Oct 25 15:35:55 2020Sun Oct 25 15:35:55 2020MainThreadmaintestthreadtest11 Sun Oct 25 15:35:56 2020Sun Oct 25 15:35:56 2020MainThreadmaintestthreadtest2 2 Sun Oct 25 15:35:57 2020Sun Oct25 15:35:57 2020MainThreadmain testthreadtest33 Sun Oct 25 15:35:58 2020Sun Oct 25 15:35:58 2020testthreadtestMainThreadmain44 Sun Oct 25 15:35:59 2020Sun Oct 25 15:35:59 2020

Thread 的 is_alive() 方法查询线程是否还在运行。is_alive() 返回 True 的情况是 Thread 对象被正常初始化,start() 方法被调用,

然后线程的代码还在正常运行。join()提供线程阻赛手段,让一个线程先运行,一个后运行。默认的情况是,join() 会一直等待对应线程的结束,

但可以通过参数赋值,等待规定的时间就好了:join(timeout=None)

importthreadingimporttimedeftest():for i in range(5):print(threading.current_thread().name+"test",i,time.ctime())

time.sleep(0.5)

thread= threading.Thread(target=test,name="testthread")

thread.start()

thread.join()for i in range(5):print(threading.current_thread().name+"main",i,time.ctime())print(thread.name + "is alive", thread.is_alive())

time.sleep(1)

"""output"""testthreadtest 0 Sun Oct25 16:15:08 2020testthreadtest1 Sun Oct 25 16:15:09 2020testthreadtest2 Sun Oct 25 16:15:09 2020testthreadtest3 Sun Oct 25 16:15:10 2020testthreadtest4 Sun Oct 25 16:15:10 2020MainThreadmain 0 Sun Oct25 16:15:11 2020testthreadis alive False

MainThreadmain1 Sun Oct 25 16:15:12 2020testthreadis alive False

MainThreadmain2 Sun Oct 25 16:15:13 2020testthreadis alive False

MainThreadmain3 Sun Oct 25 16:15:14 2020testthreadis alive False

MainThreadmain4 Sun Oct 25 16:15:15 2020testthreadis alive False

thread中的 daemon 属性。Thread 的构造方法中有一个 daemon 参数,默认是 None。如果要达到,MainThread 结束,子线程也立马结束,怎么做呢?

可以在子线程的构造器中传递 daemon 的值为 True。 thread = threading.Thread(target=test,name='TestThread',daemon=True)

面向对象编程实现以上线程代码:自定义一个 Thread 的子类,然后复写它的 run() 方法

importthreadingimporttimeclassTestThread(threading.Thread):def __init__(self, name=None):

threading.Thread.__init__(self,name=name)defrun(self):for i in range(5):print(threading.current_thread().name + "test",i)

time.sleep(1)

thread= TestThread(name="testthread")

thread.start()for i in range(5):print(threading.current_thread().name + "main",i)print(thread.name + "is alive", thread.is_alive())

time.sleep(1)

睡眠排序法

importthreadingfrom time importsleep,ctime

lst=[1,3,2,4]deff(n):

sleep(n)print(n,threading.current_thread().name,ctime())

threads=[]for i inrange(len(lst)):

thread= threading.Thread(target=f,args=(lst[i]))

threads.append(thread)for i inrange(len(lst)):

threads[i].start()

"""OUTPUT"""

1 Thread-1 Sun Oct 25 22:40:57 2020

2 Thread-3 Sun Oct 25 22:40:58 2020

3 Thread-2 Sun Oct 25 22:40:59 2020

4 Thread-4 Sun Oct 25 22:41:00 2020

importthreadingclassMyThreading(threading.Thread):def __init__(self, func, arg):

super(MyThreading, self).__init__()

self.func=func

self.arg=arg#重写run()方法

defrun(self):

self.func(self.arg)defmy_func(args):'''此处可以把你想让线程做的事定义在这里'''

print("我是业务函数...")passobj= MyThreading(my_func, 123)

obj.start()

importthreadingfrom time importsleep,ctimeclassMythread(threading.Thread):def __init__(self, func, args):

threading.Thread.__init__(self)

self.func=func

self.args=args#重写run()方法

defrun(self):

self.func(self.args)

lst= [2,4,3,5]defmy_func(n):

sleep(n)print(n,threading.current_thread().name,ctime())

threads=[]for i inrange(len(lst)):

thread= Mythread(my_func,args=(lst[i]))

threads.append(thread)for i inrange(len(lst)):

threads[i].start()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值