python 进程、线程、协程感悟
进程:
感觉只是使用Process模块加以使用即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # -*- 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模块加以使用即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | # -*- 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模块加以使用即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # -*- 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) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)