我编写了一个类似于shazam应用程序的python脚本。它捕获15秒的音频,然后尝试猜测它对应的数据库中的哪首歌。我已经存储了我们的歌曲数据库(字典词典,其中每个键代表歌曲名称)作为pickle文件,称之为song_db.p,因为创建数据库实际上需要几个小时,大约有100首歌曲。当我运行“Shazam应用程序”时,这些步骤是:
步骤2大约需要45秒才能完成。不是很好!我想要做的是一旦用户运行程序或者在录音旁边开始取消我的数据库(因为这是录音长度,至少可以节省15秒),因为这两者是独立的。如何在后台进程中运行unpickling功能,该进程将与记录歌曲和主函数中的任何函数一起运行,但我不想在unpickling完成之前调用guess_song。
这是我编写的代码,它让我获得了大约5-10秒的提升但是我正在并行运行(不是在后台)和录音。我想我肯定可以做得更好。
from multiprocessing import Process
def run_in_parallel(*fns):
proc = []
for fn in fns:
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
我在我的主要功能中将其称为:
run_in_parallel(recording_file = record_song(), song_db = get_db())
其中record_song()是自解释的,get_db执行数据库的unpickling。