python - Python中如何控制对多个底层对象的异步访问?

标签 python asynchronous

我如何有效地管理 python 中多个客户端线程对多个底层对象的独占访问?

目前,我有任意数量的回调线程(ROS Python)共享对单个计算对象的访问,信号量如下:

def my_callback(self, data):
    self.sem.acquire()
    response = self.compute_object.compute(data)
    self.sem.release()
    self.publish_response(response)

但是我希望能够创建任意数量的底层计算对象的实例化,并为回调提供对第一个可用实例的独占访问权。标准库是否可以实现大致类似的东西?

def my_callback(self, data):
    compute_object_id = self.sem.acquire()
    response = self.compute_objects[compute_object_id].compute(data)
    self.sem.release(compute_object_id)
    self.publish_response(response)

最佳答案

队列 (Queue.Queue in python2) (queue.Queue in python3)是异步多生产者、多消费者问题的一个很好的解决方案。

创建队列:

import queue
# asynch queue holding compute objects ready to accept new jobs
self.compute_object_queue = queue.Queue(maxsize=compute_object_instances)

# initiate compute_object N times and add each instance to the queue
for i in range(compute_object_instances):
    self.compute_object_queue.put(compute_object(param1, param2))

使用队列:

compute_object = self.compute_object_queue.get()
results = compute_object.compute(data)
self.compute_object_queue.put_nowait(compute_object)

关于python - Python中如何控制对多个底层对象的异步访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57620943/

相关文章:

python - numpy数组中的np.nan是否占用内存?

python - Python 字符串转日期时间的问题

javascript - OBJLoader 的异步问题 - 等待 XHR 完成加载

java - Spring Boot 2异步进行调用但不返回响应

python - 引发ValueError('Fileobj必须实现读取')

python - django.template.exceptions.TemplateSyntaxError : Could not parse some characters: |{{b.count}}||rangef

python - Django - 如何为模型的外键制作表格?

javascript - 异步函数头脑 Storm - Babel

swift - 单元测试定时器?

javascript - 我使用的是flutter版本3.3.5。我收到以下代码的错误消息 "Do not use BuildContexts across async gaps."