gpt4 book ai didi

python - 多处理仅运行第一行代码

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:33 27 4
gpt4 key购买 nike

您好,我在尝试让多处理工作时遇到问题。因此,在 apply_async 调用之后,它只执行函数的第一行,而不执行其他任何操作。任何帮助将不胜感激。谢谢!

tp = ThreadPool(processes=4)

for file in listdir(alignDir):
tp.apply_async(trim, (file,))
sleep(0.5)

tp.close()
tp.join()
def trim(file):
print("Trimming " + file)
input_file = alignDir + file
print(input_file)

我得到以下结果

Start Trimming.
Trimming Africa_HA_merged_aligned.fasta
Trimming Africa_MP_merged_aligned.fasta
Trimming Africa_NA_merged_aligned.fasta
Trimming Africa_NP_merged_aligned.fasta
Trimming Africa_NS_merged_aligned.fasta
Trimming Africa_PA_merged_aligned.fasta
.
.
.
all the way to the end and nothing was actually done

而不是

Start Trimming.
Trimming Africa_HA_merged_aligned.fasta
someinputfile string
Trimming Africa_MP_merged_aligned.fasta
anotherinputfile string
Trimming Africa_NA_merged_aligned.fasta
anotherinputfile string
.
.
.
and so on

最佳答案

可能发生的情况是 trim 抛出异常,但该异常无处可去,因此它被丢弃。该脚本要求使用apply_async在后台完成许多事情,但它从不要求结果(使用即get),因此这些结果 - 包括可能的异常(exception) - 永远不要到达任何地方。

解决此问题的一种方法是替换此循环:

for file in listdir(alignDir):
tp.apply_async(trim, (file,))

使用诸如 map 方法之类的方法,该方法“...将可迭代对象分割成许多 block ,并将其作为单独的任务提交给进程池...”,并且最重要的是,“ block 直到结果准备好”( docs ),类似于:

tp.map(trim, listdir(alignDir))

这些 block 的大小是可配置的;您现有的循环将相当于 block 大小 1。

因为脚本现在等待结果,所以它会注意到是否存在异常而不是结果,并且该异常会像往常一样传播和记录。

关于python - 多处理仅运行第一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58249764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com