多进程、协程、事件驱动及select poll epoll

摘要:
目录-多线程使用场景-多进程-简单的多进程示例-进程之间数据的交互实现方法-进程之间的数据传输可以通过队列和管道实现,但无法实现数据共享--队列--管道--不同进程之间的数据共享可以通过管理器--进程同步实现,即,进程锁--进程池--协处理器--实现具有产量的简单协处理器--Greenlet--Gevent--使用协处理器Gevent编写一个简单的并发爬网

目录

-多线程使用场景

-多进程

 --简单的一个多进程例子

 --进程间数据的交互实现方法

   ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享

   ---Queues

    ---Pipe

    ---通过Manager可以不同进程间实现数据的共享

 --进程同步,即进程锁

 --进程池

-协程

 --先用yield实现简单的协程

 --Greenlet

 --Gevent

 --用协程gevent写一个简单并发爬网页

-事件驱动

 --IO多路复用

   ---用户空间和内核空间

    ---文件描述符fd

    ---缓存IO

 --IO模式

   ---阻塞I/O(blocking IO)

    ---非阻塞I/O

    ---I/O多路复用(IO multiplexing)

    ---异步I/O(asynchronous IO)

-关于select poll epoll

 --select

 --poll

 --epoll

 --以select方法为例子进行理解

多线程的使用场景

IO操作不占用CPU

计算占用cpu

python多线程不适合cpu密集型操作的任务,适合IO操作密集型的任务

多进程

简单的一个多进程例子:(用于理解对多线程方法的使用)

和线程的方法类似,下面是一个简单的多进程代码

 1 #AUTHOR:FAN
 2 import time,multiprocessing
 3 
 4 def run(name):
 5     time.sleep(2)
 6     print("hello",name)
 7 
 8 if __name__ =="__main__":
 9     for i in range(6):
10         p = multiprocessing.Process(target=run,args=("dean",))
11       p.start()

和之前学习的多线程结合在一起使用,代码如下:

 1 #AUTHOR:FAN
 2 
 3 import time,threading
 4 import multiprocessing
 5 
 6 def thread_run():
 7     print(threading.get_ident())   #这里表示获取线程id
 8 
 9 
10 def run(name):
11     time.sleep(2)
12     print("hello",name)
13     t=threading.Thread(target=thread_run)
14     t.start()
15 
16 if __name__ =="__main__":
17     for i in range(6):
18         p = multiprocessing.Process(target=run,args=("dean",))
19         p.start()

运行结果如下:

多进程、协程、事件驱动及select poll epoll第1张多进程、协程、事件驱动及select poll epoll第2张
 1 D:python35python.exe D:/python培训/s14/day10/进程与线程结合使用.py
 2 hello dean
 3 10008
 4 hello dean
 5 9276
 6 hello dean
 7 8096
 8 hello dean
 9 1308
10 hello dean
11 hello dean
12 10112
13 8032
14 
15 Process finished with exit code 0
View Code

接着我们查看下面代码:

 1 #AUTHOR:FAN
 2 
 3 from multiprocessing import Process
 4 import os
 5 
 6 
 7 def info(title):
 8     print(title)
 9     print('module name:', __name__)
10     print('parent process:', os.getppid())
11     print('process id:', os.getpid())
12     print("

")
13 
14 
15 def f(name):
16     info('

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c++ 判断是否有Emoji表情ECMAScript正则表达式6个最新特性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php-fpm和cgi,并发响应的理解以及高并发和多线程的关系

首先搞清楚php-fpm与cgi的关系 cgi cgi是一个web server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议,保证了传递的是标准数据。 php-cgi php-cgi是php解释器,就是上文提到的cgi程序。 Fastcgi Fastcgi是用来提高cgi程序(php-cgi)性能的方案/协议。 cgi程序的性能问题在...

python中和生成器协程相关的yield之最详最强解释,一看就懂(一)

yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底懵逼。所以写一篇总结讲讲yield的东西。 分成四块来讲, 这篇先说yield基本用法,后面会重点将yield from的牛逼之处 一, 生成器中使用yiel...

线程的查看以及利用gdb调试多线程

摘自:https://blog.csdn.net/zhangye3017/article/details/80382496 1. 线程的查看首先创建两个线程: 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <pthread.h> 4 #include...

Qt封装QTcpServer参考资料--QT4中构建多线程的服务器

首先说一下对多线程这个名词的理解过程。以前听说过很多次多线程这个词,而且往往与服务器联系起来,因此一直把多线程误解为服务器特有的功能;直到这次课程设计,仔细学习了一下多线程的机制,才知道真正的意思。简单的来说,就是同时有多个线程一起运行,而不同的线程可以执行不同的操作。举个例子,一个图像处理工具,可以用鼠标一边移动图像,一边用快捷键缩放图像,此时,移动图像...

win32多线程: 线程创建与结束等待

1 #include<Windows.h> 2 #include<iostream> 3 4 using namespacestd; 5 6 /*1、在启动一个线程之前,必须为线程编写一个全局的线程函数, 7 * 这个线程函数接受一个32位的LPVOID(没有类型的指针)作为参数,返回一个DWORD 8 *这里建了两个全局的线程...

Java面试——多线程面试题总结

0.前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分,本文汇总了常见的一些多线程面试题。 一些问题,比如volatile关键词的作用,synchronized和ReentrantLock的区别,wait()和sleep()的区别等等问题,已经在之前写过的文章中提到过了,这里就不赘述了,有兴趣可以查看以下几篇文章:Java并发——线程同...