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