多线程在while循环中卡住



此代码的目的是计算SDR样本的FFT并求平均值。多线程用于在阵列中有可用数据时对FFT频谱进行平均,以节省时间。代码停留在第二行,而在第29行循环(没有错误(。我确信这一点,因为我已经尝试删除了多线程,因此while循环和其余代码都很好。这个问题的解决方案似乎是添加一个打印命令,如下所示。为什么?

sdr = RtlSdr()
sdr.sample_rate = 2.4e6
sdr.center_freq = 1420e6     
sdr.freq_correction = 1  
sdr.gain = 40.2
num_points= 1024
integration_time= 5
block_duration=num_points/sdr.sample_rate
num_spectra=int(integration_time/block_duration)
freq_res=sdr.sample_rate/num_points
start_freq=sdr.center_freq-(sdr.sample_rate/2)
stop_freq=sdr.center_freq+(sdr.sample_rate/2)
raw_spectra=[]
sum_arr=[]
def generate():
for _ in range(num_spectra):
raw_samples=sdr.read_samples(num_points)*np.hamming(num_points)
spectra=(abs(np.fft.fft(raw_samples)))**2
raw_spectra.append(spectra)
def average():
zero_arr=[]
for _ in range(num_points):
zero_arr.append(0)
counter=0
while counter!=num_spectra:
while len(raw_spectra)==0:
continue
zero_arr=zero_arr+raw_spectra[0]
del raw_spectra[0]
counter+=1
sum_arr.append(zero_arr)
p1=threading.Thread(target=generate)
p2=threading.Thread(target=average)
p1.start()
p2.start()
p1.join()
p2.join()

##Solution##
while len(raw_spectra)==0:
print(0)
continue

average-方法中的这一部分存在问题:

while counter!=num_spectra:
while len(raw_spectra)==0:
continue # infinite-loop right here

这里的continue指的是内部循环,所以它只是永远循环。

如果发生len(raw_spectra)==0,你会被卡住:(

最新更新