在下面的GNU Radio处理块中,我无法确定首先将input_items
的值传递给work
的人/什么。是否可以将该值传递给__init__
函数?
我有一个文件xyz.py:
class xyz(gr.sync_block):
"""
docstring for block add_python
"""
def __init__(self, parent, title, order):
gr.sync_block.__init__(self,
name="xyz",
in_sig=[numpy.float32,numpy.float32],
out_sig=None)
................
................
//I want to access the value of input_items here
...............
...............
def work(self, input_items, output_items):
................
答案 0 :(得分:3)
__init__
函数只调用一次"初始化"类的新实例。除了设置输入和输出类型以便可以成功连接块之外,它与通过流程图移动数据无关。
因此,在top_block
中,您可能有:
proc = xyz() # xyz's __init__ is called here
self.connect(source, proc, sink) # still no input_items, just connected flowgraph
稍后,您运行流程图:
tb = top_block()
tb.run() # 'input_items' are now passed to 'work' of each block in succession
运行流程图时,GNU Radio调度程序从源块中获取大量样本并将它们放入缓冲区。然后它将该缓冲区传递给流程图中下一个块的work
函数,以及一个"空的"输出项的缓冲区。
因此,当有数据需要处理时,调度程序会自动调用每个块的work
函数。 __init__
无法访问work
的任何参数,因为input_items
在work
被调用时甚至尚未传递给__init__
。
答案 1 :(得分:0)
work
是一个与__init__
完全分开的函数。其参数不能在该函数之外访问。如果您想访问input_items
,请将其添加到__init__
参数列表,并在致电__init__
时将其传递。