ZeroMQ指南指出套接字不应该在线程之间共享。将ZeroMQ套接字移至另一个线程
def zthread_fork(ctx, func, *args, **kwargs):
"""
Create an attached thread. An attached thread gets a ctx and a PAIR
pipe back to its parent. It must monitor its pipe, and exit if the
pipe becomes unreadable. Returns pipe, or NULL if there was an error.
"""
a = ctx.socket(zmq.PAIR)
a.linger = 0
b = ctx.socket(zmq.PAIR)
b.linger = 0
a.set_hwm(1)
b.set_hwm(1)
iface = "inproc://%s" % binascii.hexlify(os.urandom(8))
a.bind(iface)
b.connect(iface)
thread = threading.Thread(target=func, args=((ctx, b)+args), kwargs=kwargs)
#thread.daemon = True
thread.start()
return a
是否还好在一个线程创建ZeroMQ插座,然后再使用:然而,在Pyre ZeroMQ项目,在zhelper模块中的一些点套接字在一个线程,然后在一个新的线程用于创建它在另一个线程中是否创建者线程实际上没有调用任何套接字函数?
如果跨线程共享,会导致锁定/问题。但从技术上讲这是可能的。我会反对它的建议,但如果你有自己的头,它应该是可以使其工作。 – Torxed
只是出于好奇,在新线程中创建套接字的含义是什么? – Turion
没什么,这是我在自己的代码中所做的。但是,这个例子是来自官方ZeroMQ项目的样本。这就是为什么我在这里有点困惑,因为它似乎没有遵循通常的建议。 – Charles