python 进程、线程、协程感悟
进程:
感觉只是使用Process模块加以使用即可:
# -*- coding: utf-8 -*-
# data:2019-02-23 21:23
# user:DIY
# file:thread_master.py
from socket import *
from multiprocessing import Process
from time import sleep
def dealWithClient(newSocket,destAddr):
while True:
recvData = newSocket.recv(1024)
if recvData:
print('recv[%s]:[%s]' %(str(destAddr),recvData.decode()))
else:
print('[%s]客户端已经关闭'%(str(destAddr)))
break
newSocket.close()
def main():
serSocket = socket(AF_INET,SOCK_STREAM)
serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
localAddr = ('',7788)
serSocket.bind(localAddr)
serSocket.listen(5)
try:
while True:
print('----主进程等待新客户端的到来---')
newSocket,destAddr = serSocket.accept()
print('---主进程接来下创建一个新的进程负责数据处理数据[%s]' %str(destAddr))
client = Process(target=dealWithClient,args=(newSocket,destAddr))
client.start()
newSocket.close()
finally:
serSocket.close()
if __name__ == '__main__':
main()
线程感觉只是使用Thread模块加以使用即可:
# -*- coding: utf-8 -*-
# data:2019-02-24 7:47
# user:DIY
# file:Thread_master.py
from socket import *
from threading import Thread
from time import sleep
def dealWithClient(newSocket,destAddr):
while True:
recvData = newSocket.recv(1024)
if recvData:
print('recv[%s]:[%s]' %(str(destAddr),recvData.decode()))
else:
print('[%s]客户端已经关闭'%(str(destAddr)))
break
newSocket.close()
def main():
serSocket = socket(AF_INET,SOCK_STREAM)
serSocket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
localAddr = ('',7788)
serSocket.bind(localAddr)
serSocket.listen(5)
try:
while True:
print('----主进程等待新客户端的到来---')
newSocket,destAddr = serSocket.accept()
print('---主进程接来下创建一个新的进程负责数据处理数据[%s]' %str(destAddr))
client = Thread(target=dealWithClient,args=(newSocket,destAddr))
client.start()
# newSocket.close()
finally:
serSocket.close()
if __name__ == '__main__':
main()
协程感觉只是使用monkey和gevent模块加以使用即可:
# -*- coding: utf-8 -*-
# data:2019-02-24 9:13
# user:DIY
# file:yield_协程.py
import sys,time,gevent
from gevent import socket,monkey monkey.patch_all()
def handel_request(conn):
while True:
data = conn.recv(1024)
time.sleep(5)
if not data:
print('[%s]连接断开' % conn)
conn.close()
break
print('recv',data.decode())
def server(port):
s = socket.socket()
s.bind(('127.0.0.1',port))
s.listen(5)
while True:
cli,add = s.accept()
gevent.spawn(handel_request,cli) if __name__ == '__main__':
server(8080)
python 进程、线程、协程感悟的更多相关文章
- Python 进程线程协程 GIL 闭包 与高阶函数(五)
Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...
- python -- 进程线程协程专题
进程专栏 multiprocessing 高级模块 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork() ...
- python 进程 线程 协程
并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...
- python进程/线程/协程
一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...
- python 进程/线程/协程 测试
# Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/5/24 21:38 # 进程:如一个人拥有分身(分数数最好为cpu核心数)几乎同时 ...
- Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程
1 引言 并发.并行.串行.同步.异步.阻塞.非阻塞.进程.线程.协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念. 2 并发与并行 在解释并发与并行之前 ...
- python自动化开发学习 进程, 线程, 协程
python自动化开发学习 进程, 线程, 协程 前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...
- 进程&线程&协程
进程 一.基本概念 进程是系统资源分配的最小单位, 程序隔离的边界系统由一个个进程(程序)组成.一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stac ...
- 多道技术 进程 线程 协程 GIL锁 同步异步 高并发的解决方案 生产者消费者模型
本文基本内容 多道技术 进程 线程 协程 并发 多线程 多进程 线程池 进程池 GIL锁 互斥锁 网络IO 同步 异步等 实现高并发的几种方式 协程:单线程实现并发 一 多道技术 产生背景 所有程序串 ...
- python的进程/线程/协程
1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...
随机推荐
- Alluxio/Tachyon如何发挥lineage的作用?
在Spark的RDD中引入过lineage这一概念.指的是RDD之间的依赖.而Alluxio则使用lineage来表示文件之间的依赖.在代码层面,指的是fileID之间的依赖. 代码中的注释指出: * ...
- BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队 - 线段树
description 查询区间最大和最小 题解 线段树 愉悦身心啊 代码 #include<cstring> #include<cstdio> #include<alg ...
- TYVJ 1940 创世纪
Description: 上帝手中有着 N 种被称作“世界元素”的东西,现在他要把它们中的一部分投放到一个新的空间中去以建造世界.每 种世界元素都可以限制另外一种世界元素,所以说上帝希望所有被投放的世 ...
- Laravel 上使用 phpexcel的两种方式
原创 2017年06月24日 20:24:31 1229 文章采集与网上 方式1.使用原生的phpexcel , http://blog.csdn.net/CSwfe/article/details/ ...
- Laravel 5 如何对部份 URI 禁用 CSRF 验证
打开中间件 VerifyCsrfToken.php 在其 $except 属性中添加要禁用的 uri,如: api/user/add api/user/* api/*
- [BAT]win7下用批处理脚本自动删除7天以前创建的文件
set JmeterPath=D:\apache-jmeter-2.7 forfiles /p %JmeterPath%\extras /m *.html -d -7 /c "cmd /c ...
- powerdesigner 生成表备注
第一步: 操作:Database-->Edit Current DBMS,进入下图页面, 然后分别将 Script-->Objects-->Table-->TableComme ...
- JAVA对字符串的压缩与解压缩
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...
- ubuntu系统下安装pyspider:使用supervisord启动并管理pyspider进程配置及说明
首先感谢segmentfault.com的“imperat0r_”用户的文章和新浪的“小菜一碟”用户的文章.这是他们的配置文件.我参考也写了一个,在最后呢. 重点说明写在前面.本人用superviso ...
- delphi XE7 数组操作中缺少的find(POS)功能
delphi xe7 中对数组操作做了很多扩充,比如加入了类似字符串处理的功能. 例如,数组相加 var A: array of integer; B: TBytes = [1,2,3,4]; //I ...