它说的是什么意思:
requests.exceptions.ConnectionError: None: Max retries exceeded with url: /myurl (Caused by None)
Run Code Online (Sandbox Code Playgroud)
具体来说,“无人引起”是什么意思?
我有一个python客户端和一个简单的clojure服务器在同一台计算机上运行。该服务器在具有4个线程的compojure + http-kit上运行。客户端通过多处理使用3到4个进程连续提交POST请求.3个工作进程池。
每隔一段时间,客户端就会死于上述ConnectionError。我在客户端设置了retries = 3,并将服务器上的队列大小增加到1000000,没有任何效果。
任何帮助,将不胜感激。
编辑:更正,我实际上是发送POST请求而不是GET。
实际脚本太大,无法在此处发布,但基本上它的工作原理是这样的。我有一个函数,它使用一些数据调用发布:
def post_func(my_data, config):
return requests.post(my_url, data=json.dumps({"data": my_data, "config": config}))
Run Code Online (Sandbox Code Playgroud)
包装multiprocessing.Pool的类:
class Executor(object):
def __init__(self, nprocs):
self.pool = Pool(processes=nprocs)
def execute(self, func, list_of_data):
return self.pool.map(func, list_of_data)
Run Code Online (Sandbox Code Playgroud)
另一个使用不同配置调用Executor.execute()的函数:
function eval(executor, list_of_data, config):
start = timer()
func = partial(post_func, config=config)
results = executor.execute(func, list_of_data)
taken = timer()-start
return results
Run Code Online (Sandbox Code Playgroud)
单个执行程序可用于所有eval()调用。然后将eval()包装在一个计分函数中,并赋予pyswarm进行优化:
pso(score_func, lbs, ubs, swarmsize=20, maxiter=20, debug=True)
Run Code Online (Sandbox Code Playgroud)
编辑:我可能应该早些做些什么,但是正确捕获ConnectionError给我这个:
ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max …Run Code Online (Sandbox Code Playgroud) 我正在尝试恢复图像中建筑物三个轴的 3D 方向。
我目前的做法是手动标注三个轴对应的三个消失点,估计相机标定矩阵K,然后通过归一化K^{-1}v_{i}从一个消失点计算旋转矩阵的每一列,如本文附录中所述。
尽管这似乎有效,但 R 的计算列并不完全正交,我怀疑如果消失点噪声更大,问题会更加明显。
我可以通过使用 SVD 分解估计的 R 并将所有奇异值设置为 1 来捏造它,但我更喜欢更有原则的解决方案。另一种思路是将其作为约束优化问题来解决,该问题旨在最小化消失点上的投影误差。
是否有更好的方法从 K 和消失点计算旋转矩阵,同时考虑正交性和列单位约束?
提前致谢。
我一直在玩pyzmq和使用HWM进行简单的负载平衡,但我不太了解所看到的行为。
我建立了一个简单的多线程测试,将DEALER客户端通过ROUTER to DEALER模式连接到两个工作程序。HWM设置为1。其中一个工作进程非常快,另一个工作进程非常慢,客户端所做的只是向服务器发送100条垃圾邮件。通常看来,这是可行的,并且速度较快的工作者比速度较慢的工作者处理更多的消息。
但是,即使我将慢工作程序设置为如此慢,以至于快工作程序应该能够在慢工作程序完成一个消息之前就处理99条消息,但慢工作程序似乎仍会接收至少2或3条消息。
高水位标记的行为不准确还是我缺少了什么?
服务器代码如下:
import re, sys, time, string, zmq, threading, signal
def worker_routine(worker_url, worker_id, context=None):
# socket to talk to dispatcher
context = context or zmq.Context.instance()
socket = context.socket(zmq.REP)
socket.set_hwm(1)
socket.connect(worker_url)
print "worker ", worker_id, " ready ..."
while True:
x = socket.recv()
if worker_id==1:
time.sleep(3)
print worker_id, x
sys.stdout.flush()
socket.send(b'world')
context = zmq.Context().instance()
# socket facing clients
frontend = context.socket(zmq.ROUTER)
frontend.bind("tcp://*:5559")
# socket facing services
backend = context.socket(zmq.DEALER)
url_worker = "inproc://workers"
backend.set_hwm(1)
backend.bind(url_worker)
# launch …Run Code Online (Sandbox Code Playgroud)