首页 > 代码库 > 【python自动化第十篇:】
【python自动化第十篇:】
复习:
线程与进程的区别:
进程:资源的集合
线程:最小调度单位
- 进程至少包含一个线程
- 线程之间的内存是共享的,两个线程操作同一个数据就会修改整个结果(需要mutex加锁来保持数据的一致性),递归锁,join(等待)
信号量:也相当于是lock
守护线程:服务于非守护线程;
quene:程序的解耦;提高效率;也是有序的容器;队列只有一份数据,取完了就没有了
先进先出(FIFO)
后进先出(LIFO)
生产者消费者模型:也就是为了实现解耦
event:事件---红绿灯实验
i/o不占用cpu,计算占用
python多线程不适合cpu密集型操作任务,适合i/o密集型任务
推荐的书:
《失控》,《必然》
《数学之美》,《浪潮之巅》
鸡汤总结:做一个有素质的人
今天的课程:
- govent协程
- select\poll\epoll异步I/O事件驱动
- python连接mysql的基本操作
- rabbitmq队列
- redis/memcached缓存
- paramiko ssh
- twisted网络框架
一、多进程
解决多核问题而生
单个进程:
#!/usr/bin/env python# -*- coding:utf-8 -*-import multiprocessing,timedef run(name): #定义函数 time.sleep(1) print(‘hello‘,name) if __name__ == ‘__main__‘: p = multiprocessing.Process(target=run,args=(‘hehe‘,)) #实例化一个进程 p.start() #执行进程 p.join() #进程等待
多进程:
#!/usr/bin/env python# -*- coding:utf-8 -*-import multiprocessing,timedef run(name): print(‘hello‘,name) time.sleep(1)if __name__ == ‘__main__‘: for i in range(10): #定义循环 p = multiprocessing.Process(target=run,args=("hehe %s"%i,)) p.start()
获取进程id:
#!/usr/bin/env python# -*- coding:utf-8 -*-import multiprocessing,osdef info(title): #信息展示函数 print(title) print(‘module name:‘,__name__) #打印模块名称 print(‘parent process id‘,os.getppid()) #父进程id获取 print(‘process id‘,os.getpid()) #当前进程id print(‘\n\n‘)def f(name): #定义功能函数 info(‘\033[31;1mfunction f\033[0m‘) print(‘hello‘,name)if __name__ == ‘__main__‘: #主进程调用 info(‘\033[32;1mmain process line\033[0m‘) p = multiprocessing.Process(target=f,args=(‘hehe‘,)) #定义进程 p.start() #开始进程 p.join() #进程等待
每一个子进程都是有其父进程启动的
【python自动化第十篇:】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。