我如何有效地管理 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/