socket 多线程安全、粘包问题
2024-09-05 04:27:16
脚本如下:
# -*- coding:utf-8 -*-
'''
@Author: Stefan @File: server_listener.py @Date: 2016-11-09 If you execute this test script on servers, you have to modify the system parameter below:
sysctl net.ipv4.tcp_tw_recycle=1
'''
import sys
sys.path.append('/export/servers/app/xxxx')
import time
import socket
import threading
import multiprocessing
from src.xxxxclient.xxxx_client.lib.socket import header_pack, receive
HEADER_LENGTH = 16
DEFAULT_TCP_PORT = 1104
DATA = {'xxxx_ADMIN': 'thread_keepalive'} count_of_processes = range(1)
# DO NOT modify the parameter below
count_of_threads = range(1) # Unit: second
execute_time = 60 def loop(times):
""" :return:
"""
time_start_now = time.time()
time_future = time_start_now + execute_time
while True:
if time_start_now > time_future:
break
else:
time_start = time.time()
S = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# S.connect(('127.0.0.1', DEFAULT_TCP_PORT))
S.connect(('x.x.x.x', DEFAULT_TCP_PORT))
header, data = header_pack(DATA, HEADER_LENGTH)
S.sendall(header+data)
header, result = receive(S, HEADER_LENGTH, 1024)
S.close()
time_end = time.time()
time_used = time_end - time_start
print "Thread lasted %.2f sec. Status: %s" % (time_used, result)
time_end_now = time.time()
time_gap = time_end_now - time_start_now
time_start_now += time_gap def multi_threads():
""" :return:
"""
threads_list = list()
for i in count_of_threads:
t = threading.Thread(target=loop, args=str(count_of_threads[i]).split())
threads_list.append(t) for i in count_of_threads:
threads_list[i].start() for i in count_of_threads:
threads_list[i].join() class muliti_process(multiprocessing.Process):
""" """
def __init__(self):
""" :return:
"""
multiprocessing.Process.__init__(self)
self.processes_list = list() def run(self):
""" :return:
"""
for i in count_of_processes:
p = multiprocessing.Process(target=multi_threads,)
self.processes_list.append(p) for i in self.processes_list:
i.start() if __name__ == '__main__':
p = muliti_process()
global_start = time.time()
p.start()
p.join()
global_end = time.time()
global_used = global_end - global_start
print "==================\nTotal %.2f sec" % global_used
最新文章
- Android学习探索之Java 8 在Android 开发中的应用
- Hello bokeyuan!
- AngularJS多模块开发
- python中列表,元组,字符串互相转换
- Could not parse mapping document from input stream
- Android菜鸟成长记10 -- ListVew
- 粒子滤波particle filter和目标跟踪
- UI学习笔记---第十四天数据持久化
- OGG-00782 - OGG 11.2.1.0.2 FOR Windows x64 Microsoft SQL Server
- nginx 配置文件
- 1090. Highest Price in Supply Chain (25)
- POJ2236 Wireless Network 并查集
- JDK之jstat的用法
- ACM——3n+1
- iOS 16进制颜色转换10进制颜色
- .net嵌入c#代码(投票练习)
- foreach和for循环的区别
- 解决Plugin is too old,please update to a more recent version,or set ANDROID_DAILY_OVERRIDE..
- AndroidEclipse里的视图里想添加SDK Manager但是找不到怎么办?
- django pymysql