当前位置: 首页 > 工具软件 > Nameko > 使用案例 >

python nameko服务注册发现_如何同时使用异步模块调用nameko服务 - python

周翰池
2023-12-01

我写这样的异步程序。永久运行循环启动4事件同时发生。每个事件将运行rpc服务。在nameko服务中,我使用time.sleep(10)实现该服务。

我很困惑为什么服务每10秒完成一次。我认为服务应同时完成。如何让工作同时完成?

def start_loop(loop):

asyncio.set_event_loop(loop)

loop.run_forever()

async def job(x):

try:

with ClusterRpcProxy(CONFIG) as rpc:

res = rpc.helloworldService.helloworld(x)

print(res)

except Exception as e:

print(f"{e}")

async def do_sleep(x, queue):

try:

await job(x)

queue.put("ok")

except Exception as e:

print(f"{e}")

def consumer():

asyncio.run_coroutine_threadsafe(do_sleep('10', queue), new_loop)

asyncio.run_coroutine_threadsafe(do_sleep('11', queue), new_loop)

asyncio.run_coroutine_threadsafe(do_sleep('12', queue), new_loop)

asyncio.run_coroutine_threadsafe(do_sleep('13', queue), new_loop)

if __name__ == '__main__':

print(time.ctime())

new_loop = asyncio.new_event_loop()

loop_thread = Thread(target=start_loop, args=(new_loop,))

loop_thread.setDaemon(True)

loop_thread.start()

CONFIG = {'AMQP_URI': "amqp://guest:guest@localhost"}

queue = Queue()

sema = asyncio.Semaphore(2)

consumer_thread = Thread(target=consumer)

consumer_thread.setDaemon(True)

consumer_thread.start()

while True:

msg = queue.get()

print("current:", time.ctime())

nameko rpc服务是:

class HelloWorld:

name = 'helloworldService'

@rpc

def helloworld(self,str):

time.sleep(10)

return 'hello_'+str

输出结果如下:

hello_10

current: Sat Jan 26 13:04:57 2019

hello_11

current: Sat Jan 26 13:05:07 2019

hello_12

current: Sat Jan 26 13:05:17 2019

hello_13

current: Sat Jan 26 13:05:28 2019

参考方案

您必须使用可等待的睡眠,而不是不可等待的time.sleep()。因此,您的nameko RPC服务将如下所示:

import asyncio

class HelloWorld:

name = 'helloworldService'

@rpc

async def helloworld(self,str): # Note

await asyncio.sleep(10) # Note

return 'hello_'+str

还有您的服务器代码:

async def job(x):

try:

with ClusterRpcProxy(CONFIG) as rpc:

res = await rpc.helloworldService.helloworld(x) # Note

print(res)

except Exception as e:

print(f"{e}")

[注意]

但是您的RPC库也应该由asyncio实现。

这是一个异步asyncio RPC库(aiorpc)。

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…python JSON对象必须是str,bytes或bytearray,而不是'dict - python

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…python asyncio run_forever或True - python

我应该在代码中替换while True(不使用asyncio)还是应该使用asyncio事件循环来实现相同的结果。目前,我正在处理某种与“ zeromq”连接的“工作者”,接收一些数据,然后对外部工具(服务器)执行一些请求(http)。一切都以普通的阻塞IO编写。使用asyncio事件循环摆脱while True: ...是否有意义?将来可能会用asynci…R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

 类似资料: