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(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...
随机推荐
- linux安装php 按 apache方式
1.下载php源码包 在 http://php.net/downloads.php 下载 php-5.6.11.tar.gz 2.进入到php源码包中,configure > ./configu ...
- bootstrap下modal模态框中webuploader控件按钮异常(无法点击)问题解决办法【转】
http://bbs.csdn.net/topics/391917552 具体如下: $(function () { var _$modal = $('#MyModal'); ...
- Apache模块开发
一.简介 Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能.可以在编译时选择被静态包含进httpd二进制映象的模块,也可以编译成独立于主httpd二进制映象的 ...
- PAT 1054 求平均值 (20)(代码+思路+测试用例)
1054 求平均值 (20)(20 分) 本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区 ...
- UI设计如何做好排版?你可以学习一下格式塔原理
格式塔是一种视觉感知的理论,是研究人们视觉如何将元素组织成群体或整体,从而视觉上进行分类,在设计中,我们使用格式原理能使得我们设计更科学性,更具吸引力.通过格式塔效应,去处理设计中的点.线.面.颜色. ...
- Linux 常用环境变量
/etc/profile.d/start.sh # java export JAVA_HOME=/usr/local/jdk export CLASSPATH=.:$CLASSPATH:$JAVA_H ...
- 向文件写入一个数据块---write
函数原型:ssize_t write(int fd,const void *buf,size_t count); 参数说明:fd:文件描述符,buf:写入数据的缓冲区,count:写入数据的最大长度. ...
- 打开jsp页面时,显示空白页。
打开jsp页面时,显示空白页. #foreach($e in $listPlanItem) #set($listPlanDetail=$!e.get(2)) < ...
- Python 的stat 模块
#!/usr/bin/env python#-*- encoding:UTF-8 -*- import os,time,stat fileStats = os.stat ( 'test.txt' ) ...
- 2018.09.10 loj#10172. 涂抹果酱(状压dp)
传送门 三进制状压感觉有点难写啊. 不过这题状态转移方程挺简单的. 就直接f[i][j]表示前i行第i行状态为j时的选法总数,分情况转移就行了. 代码: #include<bits/stdc++ ...