在RealSense中共享上下文时进程冻结



在共享上下文时,周期性初始化Realsense管道并在单个周期后冻结的进程。这里有一个最小的重新创建代码:

import pyrealsense2 as rs
from multiprocessing import Process
ctx = rs.context()

class RS:
def __init__(self):
print("init")
pipe = rs.pipeline(ctx)
print(pipe)

class Proc(Process):
def __init__(self):
super(Proc, self).__init__()
def run(self):
for i in range(10):
print(i)
RS()
print("after")

vs = Proc()
vs.start()

如果上下文不共享,代码在337个周期后崩溃:

import pyrealsense2 as rs
from multiprocessing import Process

class RS:
def __init__(self):
print("init")
ctx = rs.context()
pipe = rs.pipeline(ctx)
print(pipe)

class Proc(Process):
def __init__(self):
super(Proc, self).__init__()
def run(self):
for i in range(400):
print(i)
RS()
print("after")
vs = Proc()
vs.start()

当使用线程而不是进程时,这种情况不会发生。

在第一个代码片段中(使用全局ctx时(,在主进程中初始化ctx,然后创建一个访问该ctx的新进程。

在第二个代码片段(__init__中的ctx(中,在每个循环迭代中初始化一个新的上下文。

您需要将两者结合起来:在新流程中初始化上下文,但仅初始化一次。类似的东西:

ctx = None
class RS:
def __init__(self):
global ctx

if ctx is None:
ctx = rs.context()
print("init")
pipe = rs.pipeline(ctx)
print(pipe)

最新更新