当前位置: 首页 > news >正文

汩罗网站建设什么都不懂能去干运营吗

汩罗网站建设,什么都不懂能去干运营吗,做食品网站的素材,容桂网站制作动态背景: 实现客户端与服务端交互,由于效率原因,要发送与接收异步,提高效率。 需要多线程,本文用线程池管理。 common代码: import pickle import struct import timedef send_msg(conn, data):time.sleep(…

背景:

实现客户端与服务端交互,由于效率原因,要发送与接收异步,提高效率。

需要多线程,本文用线程池管理。

common代码:

import pickle
import struct
import timedef send_msg(conn, data):time.sleep(1)msg = pickle.dumps(data)msg = struct.pack('>I', len(msg)) + msgconn.sendall(msg)return data, len(msg)def recv_from(conn, n):data = b''handle_len = 0while handle_len < n:packet = conn.recv(n - handle_len)if not packet:return Nonehandle_len += len(packet)data += packetreturn datadef recv_msg(conn):struct_msg_len = recv_from(conn, 4)if not struct_msg_len:return None, 0msg_len = struct.unpack('>I', struct_msg_len)[0]msg = recv_from(conn, msg_len)msg = pickle.loads(msg)return msg, msg_len

客户端:

#!/usr/bin/python
# -*- coding: utf-8 -*-import time
import select
import socket
import threading
from threading import Thread
from concurrent.futures import as_completed
from concurrent.futures import ThreadPoolExecutorfrom common import send_msg, recv_msgsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 生成socket
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 不经过WAIT_TIME,直接关闭
sock.setblocking(False)  # 设置非阻塞编程inputs = [sock, ]
executor = ThreadPoolExecutor(max_workers=3)  # 设置线程池最大数量print('client start!!!')try:sock.connect(("127.0.0.1", 789))
except Exception as e:print(e)def handle_received_data(data):print("接收服务端信息:", data)time.sleep(1)returndef receive_service_data():"""接收服务端返回的数据并处理"""while True:try:r_list, w_list, e_list = select.select(inputs, [], [], 1)for event in r_list:data, data_len = recv_msg(event)if data:try:executor.submit(handle_received_data, data)except Exception as e:print(threading.current_thread(), threading.active_count())print(e)else:print("远程断开连接")inputs.remove(event)exit()except OSError as e:import tracebackprint(traceback.format_exc())print(e)exit()def send_client_data(size=100):"""发送客户端数据"""executors = []for i in range(size):exe = executor.submit(send_msg, sock, {'data': i})executors.append(exe)for feature in as_completed(executors):try:data, data_len = feature.result()except Exception as e:print(e)else:print(f"客户端发送数据:{data}, len:{data_len}")if __name__ == '__main__':T1 = time.time()# 启动接受服务端数据的线程Thread(target=receive_service_data).start()# 发送客户端数据send_client_data(size=10)print('all_time:', time.time() - T1)

服务端:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import socket
import select
import threading
from concurrent.futures import ThreadPoolExecutorfrom common import send_msg, recv_msgsock = socket.socket()
sock.bind(('127.0.0.1', 789))
sock.setblocking(False)
sock.listen()inputs = [sock, ]
lock = threading.Lock()
executor = ThreadPoolExecutor(max_workers=3)  # 设置线程池最大数量print('service start!!!')def handle_received_data(event, data):time.sleep(1)send_msg(event, data)print(f"服务端发送数据:{data}")while True:r_list, w_list, e_list = select.select(inputs, [], [], 1)for event in r_list:if event == sock:print("新的客户端连接")new_sock, addresses = event.accept()inputs.append(new_sock)else:data, msg_len = recv_msg(event)if data:print("接收到客户端信息", data)executor.submit(handle_received_data, event, data)else:print("客户端断开连接")inputs.remove(event)

运行结果:


参考:

Python select.select 模块通信全过程详解_南淮北安的博客-CSDN博客 

Python标准库socketserver使用线程混入实现异步TCP服务器 

Python中的多路复用 (select、poll 和 epoll) 

 Python实现socket的非阻塞式编程 - 简书

https://www.cnblogs.com/i-honey/p/8078518.html 

 Python多线程RuntimeError: can’t start new thread-Grugsum's blog

python自学成才之路 线程间协作之Semaphore,threading.local() - 腾讯云开发者社区-腾讯云 

Python can‘t start new thread_零之领域的博客-CSDN博客 

python socket sendto函数返回值_他拍了拍你,来这里看这个Socket。_weixin_39982580的博客-CSDN博客 python线程数设置多少_为什么线程数增加超过threading.BoundedSemaphore在python的设置?..._weixin_39808803的博客-CSDN博客

https://www.cnblogs.com/shuopython/p/14943175.html 

Python线程池及其原理和使用(超级详细) 

 

http://www.zhongyajixie.com/news/27560.html

相关文章:

  • 30天网站建设实录长沙本地推广
  • 网站后台运营怎么做下载百度手机助手
  • 网站交换链接怎么做?网站搭建关键词排名
  • wordpress网站嵌入商城seo技术分享博客
  • 设计师用什么软件西安seo代运营
  • 龙岗网站制作设计软文外链代发
  • 内网网站建设方面政策如何成为app推广代理
  • 定制网站建设报价单百度指数搜索
  • 黄骅市网站建设公司头条指数
  • 泰格豪雅手表官方网站今日新闻国际最新消息
  • 网站后台是做什么的重庆百度seo排名优化软件
  • 学院二级网站建设方案模板营销型企业网站制作
  • 免费追剧网站大全结构优化
  • 最大的地方门户网站源码厦门关键词排名优化
  • 重庆网站建设沛宣网络购买模板建站
  • 网站建设 中企动力广州seo网站优化培训
  • 手机网站 文件上传推广平台
  • 个人网站相册怎么做嵌入式培训班一般多少钱
  • 扒下来的网站怎么做修改建网站的公司排名
  • 客户网站建设完成后需要什么杭州网络推广有限公司
  • 智能网站建设平台seo推广技术
  • php网站换服务器软文网官网
  • 怎么做动态网站视频短片seo网站怎么优化
  • 不想花钱做网站推广百度客服在哪里找
  • 滕州网站制作哪家好网络营销做的比较好的企业
  • 个人网站首页界面总排行榜总点击榜总收藏榜
  • 专注宜昌网站建设推广普通话手抄报模板
  • wordpress文章编辑插件关键词优化师
  • 搭建网站的价格深圳网络推广公司哪家好
  • 团购网站 方案优化外包哪里好