首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程卡在时间循环中

多线程卡在时间循环中
EN

Stack Overflow用户
提问于 2021-12-22 15:32:03
回答 1查看 195关注 0票数 1

此代码的目的是计算和平均从一个特别提款权样本的FFT。为了节省时间,只要阵列中有可用的数据,就使用多线程来平均FFT频谱。代码停留在第二行,而循环在第29行(没有错误)。我确信这一点,因为我已经尝试删除多线程,因此while循环和其余代码都可以正常工作。解决此问题的方法似乎是添加一个print命令,如下所示。为什么?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-12-22 18:30:26

average-method中的这个部分是有问题的:

代码语言:javascript
复制
    while counter!=num_spectra:
        while len(raw_spectra)==0:
            continue # infinite-loop right here

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

如果len(raw_spectra)==0发生了,你就会陷入困境:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70451472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档