python自动化第十篇:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,time def 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,time def 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,os def 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自动化第十篇:的主要内容,如果未能解决你的问题,请参考以下文章