在没有阻塞的情况下,python的性能肯定不如编译型语言。这种全异步的模型的优势也无法体现出来,一旦有IO操作了,这种全异步模型的第一步accpet新连接的操作并不会暂停,也就是只要有内容抵达,至少ioloop这个环节是可以照单全收的,接收之后协程处理,随着并发量增长它的性能下降是平稳且平滑的。反观线程模型,如果消费数据赶不上新连接新数据的生产,性能就会直线下降。
你的700qps差不多,你可以换3.1或者3.2的tornado试试,1100~1400应该可以跑出来。当然追求一个静态文本的输出性能是否有必要,我觉得实际情况比这种单纯的压测要复杂的多。
这是一个多元支持向量机回归的模型,以下是一个参考的实现代码:import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svmfrom sklearn.metrics import r2_score
# 模拟数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - np.random.rand(16))
# 分割数据
train_X = X[:60]
train_y = y[:60]
test_X = X[60:]
test_y = y[60:]
# 模型训练
model = svm.SVR(kernel='rbf', C=1e3, gamma=0.1)
model.fit(train_X, train_y)
# 预测结果
pred_y = model.predict(test_X)# 计算R2r2 = r2_score(test_y, pred_y)
# 对比图
plt.scatter(test_X, test_y, color='darkorange', label='data')
plt.plot(test_X, pred_y, color='navy', lw=2, label='SVR model')
plt.title('R2={:.2f}'.format(r2))
plt.legend()
plt.show()
上面的代码将数据分为训练数据和测试数据,使用SVR模型对训练数据进行训练,然后对测试数据进行预测。计算预测结果与真实值的R2,最后将结果画出对比图,以评估模型的效果。