我想在一个端口上初始化一个PULL
,并想从其他端口接收到我的PULL
端口。在PULL
端口的情况下,它异步侦听,当它接收到消息时,它只在控制台中打印消息。因此,我在Push
-类中编写了一个方法,它将消息发送到PULL
端口。
我的代码如下:
import random
import zmq
import time
import sys
import string
import asyncio
import zmq.asyncio
class Push():
def __init__(self, port, addr='localhost'):
self.port = port
self.addr = addr
self.ctx = zmq.Context()
self.scoket = self.ctx.socket(zmq.PUSH)
self.scoket.connect(f'tcp://{self.addr}:{selfa.port}')
def send(self):
chars = string.ascii_uppercase + string.ascii_lowercase
message = ''.join(random.choice(chars) for _ in range(4))
self.scoket.send(bytes(message, 'utf-8'))
print(f'sending: {message}')
class Pull():
def __init__(self, port, addr='*'):
self.port = port
self.addr = addr
self.ctx = zmq.Context()
self.socket = self.ctx.socket(zmq.PULL)
self.socket.bind(f'tcp://{self.addr}:{self.port}')
async def listen(self, listener):
while True:
string = await self.socket.recv()
listener(string)
if __name__ == '__main__':
push = Push('55501')
async def send():
while True:
await asyncio.sleep(5)
print('Sending...')
push.send()
pull = Pull('55501')
try:
asyncio.run(
pull.listen(print),
send(),
)
except KeyboardInterrupt:
print('exiting...')
exit()
上面的代码没有运行。代码在listen方法处停止。
2条答案
按热度按时间m4pnthwp1#
fhg3lkii2#
代码正在运行,
然而在源代码中有错误(概念上)和打字错误。
代码的现状禁止**
Push
-类成为.connect()
**-ed,因此Pull
-交易对手.bind()
-s,但没有人可以交谈。溶液
1)
修复此排印错误(+更好地明确检测和处理所有潜在错误状态)
2)
纠正概念-混合低挂水果(同时使用多个异步框架,一个框架与所有其他框架相互冲突)是对专业工程师在足够可靠和健壮**distributed-computing方面的责任理解肤浅的标志(控制概念上的缺陷,比如阿波罗11号登月,或者相反,切尔诺贝利那种管理不善的制度+心态,是干净、鼓舞人心和警示性的例子,足以说明不良做法 (如果不加以禁止+发现+纠正+处罚) 会****一次又一次地危害**。
最佳下一步
如果你渴望达到专业水平,从Pieter Hintjens的书“Code Connected,Volume 1”开始--值得花时间,值得努力,值得理解他们讨论的概念。