发布于2019-09-05 18:21 阅读(262) 评论(0) 点赞(8) 收藏(3)
- 这次讲一讲python创建多任务另外两种常见的方式:
协程和线程
from threading import Thread
import threading
import os
import time
import random
def not_know(thread_num):
print("第%d线程吟唱:不知天上宫阙"%(thread_num))
time.sleep(random.random())
print("第%d线程吟唱:今夕是何年"%(thread_num))
time.sleep(random.random())
print("第%d号线程:<吟唱古诗>任务结束..."%(thread_num))
def main():
for i in range(1, 6):
num = len(threading.enumerate())
print("当前线程数为:%d"%num)
t = Thread(target=not_know, args=(i,))
t.start()
time.sleep(0.8)
if __name__ == "__main__":
print("--->主函数开始运行<---")
main()
print("--->主函数运行完毕<---")
from threading import Thread
import threading
import os
import random
import time
class the_cosmetic(threading.Thread):
def __init__(self, num):
self.num = num
# 一定要记得调用父类构造方法
threading.Thread.__init__(self)
def run(self):
print("-->第%d线程开始执行<--"%self.num)
time.sleep(random.random())
print("%d最有效的化妆品是什么?"%self.num)
time.sleep(random.random())
print("%dPhotoshop是最好的化妆品!"%self.num)
time.sleep(random.random())
print("-->第%d线程执行完毕<--"%self.num)
def main():
print("-------->开始创建线程<--------")
for i in range(1, 6):
t = the_cosmetic(i)
t.start()
print("-------->线程创建完毕<--------")
if __name__ == "__main__":
main()
sudo pip3 install gevent
import time
import random
import gevent
from gevent import monkey
monkey.patch_all()
def peach(name):
for i in range(1, 6):
start_time = time.time()
time.sleep(random.random())
end_time = time.time()
# 使用 round() 控制小数点位数!
print("%s产出第%s个桃子,耗时%s"%(name, i, round(end_time - start_time, 2)))
def apple(name):
for i in range(1, 8):
start_time = time.time()
time.sleep(random.random())
end_time = time.time()
print("%s产出第%s个苹果,耗时%s"%(name, i, round(end_time - start_time, 2)))
def main():
# 注意:下面的语句,没有等号! 没有等号! 没有等号!
gevent.joinall([
gevent.spawn(peach,"LI"),
gevent.spawn(apple,"HO"),
])
if __name__ == "__main__":
main()
import time
def to_activate():
yield
print("吃早饭")
print("读文档")
yield
print("吃中午饭")
print("写程序")
yield
print("吃晚饭")
print("解bug")
def to_sleep():
yield
print("午睡")
yield
print("晚休")
def main():
print("程序员的一天")
activate = to_activate()
sleep = to_sleep()
# 利用yield开始在两个函数间跳转
next(activate)
next(sleep)
next(activate)
next(sleep)
next(activate)
print("程序员的一天结束了")
if __name__ == "__main__":
main()
sudo pip3 install greenlet
import time
from greenlet import greenlet
activate = None
sleep = None
def to_activate():
print("吃早饭")
print("读文档")
sleep.switch()
print("吃中午饭")
print("写程序")
print("吃晚饭")
print("解bug")
def to_sleep():
print("午睡")
activate.switch()
print("晚休")
def main():
global activate
global sleep
print("程序员的一天")
activate = greenlet(to_activate)
sleep = greenlet(to_sleep)
#从activate开始执行
activate.switch()
print("程序员的一天结束了")
if __name__ == "__main__":
main()
- 线程与进程相比,占用资源更少,但线程依赖于进程,一个进程可以有多个线程,进程完成任务依赖于内部的线程;
- 协程解决了线程之间争用资源引发的资源浪费,所以协程比线程占用的资源更少.
学习是对自己最好的投资,而机会属于有准备的人,这是一个看脸的时代,但最终拼的是实力。人和人之间的差距不在于智商,而在于如何利用业余时间,所以没有等出来的辉煌,只有干出来的精彩。其实只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间,而你之所以还没有变强,只因你还不够努力,要记得付出不亚于任何人的努力。加群一起零基础学习python304050799
你的想法再精彩,那是想法的价值
而你的价值,永远体现在行动之中
如果还停留在想的价值中,请赶快行动,
如果你学习还停止在原处,请咨询我帮助你开始
作者:goodbody
链接:https://www.pythonheidong.com/blog/article/97017/41c7c41250fb2c85fdd2/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!