零rpc异步调用

2024-04-19 00:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

服务器

假设我有下面的zerorpc服务器

#server side
import zerorpc

class API():

    def long_running_task(self):
        print('1 - started long_running_task')
        #for instance a long running SQL query
        zerorpc.gevent.sleep(10)
        print('2 - finished long_running_task')

    def other_task(self):
        print('1 - started other_task')
        pass
        print('2 - finished other_task')

s = zerorpc.Server(API())
s.bind("tcp://0.0.0.0:4444")
zerorpc.gevent.spawn(s.run)
while True:
    zerorpc.gevent.sleep(10)

客户

以及同时发送多个请求的客户端应用程序

^{pr2}$

问题是,当长时间运行的任务正在执行时,另一个任务却没有开始运行。在

所需输出为:

1 - started long_running_task
1 - started other_task
2 - finished other_task
2 - finished long_running_task

而不是

1 - started long_running_task
2 - finished long_running_task
1 - started other_task
2 - finished other_task

Tags: self服务器apitaskserverdefgeventsleep
1条回答
网友
1楼 · 发布于 2024-04-19 00:37:40

这里有一些错误

  1. async_应该是async。这样可以确保客户机方法立即返回
  2. ZeroRPC与gevent一起工作。所以您需要用gevent.spawn(s.run)启动服务器。同时也能让你的主要绿皮跑起来。在
zerorpc.gevent.spawn(s.run)
while True:
     zerorpc.gevent.sleep(10)
  1. 2以上是不够的。在{}方法中,你也需要合作。使用time.sleep()代替time.sleep()。在

相关问题 更多 >