[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Discuss-gnuradio] FG probe generation of thread.start() race condit
From: |
Jacqueline . Walker |
Subject: |
Re: [Discuss-gnuradio] FG probe generation of thread.start() race conditions (python tutorials) |
Date: |
Tue, 4 Apr 2017 14:26:45 +0000 |
Hi James,
Thanks! I was a newbie who had this problem a while ago. I knew it had to be
some issue like this, but I didn't know enough to spot it or fix it!
Jacqueline
-----Original Message-----
From: Discuss-gnuradio [mailto:address@hidden On Behalf Of Martin Braun
Sent: 31 March 2017 18:16
To: address@hidden
Subject: Re: [Discuss-gnuradio] FG probe generation of thread.start() race
conditions (python tutorials)
James,
thanks for pointing that out!
On 03/29/2017 10:22 AM, James Shimer wrote:
> Sorry if this is a duplicate/newbie question (didn't find anything
> searching). When going thru the python examples. I came across a
> race condition where the thread would start to run prior to object's
> constructor completing. The fix is to manually move the code
> generated for starting the probe thread to the very end of the constructor.
>
>
> If this "bug" is open already thanks for your time, if not here are
> some more details:
>
>
> Tutorial 3, section 3.1.5, you're asked to modify the probe thread to
> reference members of the class to set_ampl and set_freq, those
> functions in-turn access members of the object, which may not have
> been initialized yet because the thread runs while the constructor is
> still running.
>
> https://wiki.gnuradio.org/index.php/Guided_Tutorial_GNU_Radio_in_Pytho
> n
>
> The symptom:
>
> Exception in thread Thread-1:
>
> Traceback (most recent call last):
>
> File
> "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho
> n2.7/threading.py",
> line 801, in __bootstrap_inner
>
> self.run()
>
> File
> "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho
> n2.7/threading.py",
> line 754, in run
>
> self.__target(*self.__args, **self.__kwargs)
>
> File "power.py", line 95, in _variable_function_probe_0_probe
>
> self.set_ampl(0.3)
>
> File "power.py", line 174, in set_ampl
>
> self.analog_sig_source_x_0.set_amplitude(self.ampl)
>
> File
> "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho
> n2.7/site-packages/gnuradio/gr/hier_block2.py",
> line 92, in __getattr__
>
> return getattr(self._impl, name)
>
> AttributeError: 'top_block_sptr' object has no attribute
> 'analog_sig_source_x_0'
>
>
> The resolution:
>
> diff -rupN if_else.py if_else2.py
>
> --- if_else.py2017-03-29 13:20:32.000000000 -0400
>
> +++ if_else2.py2017-03-29 13:19:37.000000000 -0400
>
> @@ -101,7 +101,6 @@ class if_else(gr.top_block, Qt.QWidget):
>
> time.sleep(1.0 / (10))
>
> _variable_function_probe_0_thread =
> threading.Thread(target=_variable_function_probe_0_probe)
>
> _variable_function_probe_0_thread.daemon = True
>
> - _variable_function_probe_0_thread.start()
>
>
>
> self.qtgui_time_sink_x_0 = qtgui.time_sink_f(
>
> 1024, #size
>
> @@ -160,6 +159,7 @@ class if_else(gr.top_block, Qt.QWidget):
>
> self.connect((self.analog_sig_source_x_0, 0),
> (self.blocks_throttle_0, 0))
>
> self.connect((self.analog_sig_source_x_1, 0),
> (self.qtgui_time_sink_x_0, 0))
>
> self.connect((self.blocks_throttle_0, 0), (self.probe, 0))
>
> + _variable_function_probe_0_thread.start()
>
>
>
> def closeEvent(self, event):
>
> self.settings = Qt.QSettings("GNU Radio", "if_else")
>
>
>
> Thanks
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio