【问题标题】:how to pass a dictionary to concurrent futures executor如何将字典传递给并发期货执行者
【发布时间】:2021-06-15 03:34:03
【问题描述】:

我是使用并发期货的新手,我找不到任何关于如何做到这一点的示例。我有全局字典数据,我希望并发期货执行程序调用的函数将结果添加到其中。该功能有效,但数据中没有输出。 谢谢你的帮助, T.

def estimate_shannon_entropy(dna_sequence):
    bases = collections.Counter([tmp_base for tmp_base in dna_sequence])
    # define distribution
    dist = [x/sum(bases.values()) for x in bases.values()]

    # use scipy to calculate entropy
    entropy_value = entropy(dist, base=2)
    #norm_ent = entropy_value/math.log(len(dna_sequence),2)
    return entropy_value

def shan(i):
    
    name1=i.split("/")[-1]
    
    ext1=name1.split(".")[-1]
    
    print(name1)
    
    if ext1=="gz":
        #print("gz detected")
        f=gzip.open(i,'rt')
        k=name1.split(".")[-2]
    
    else:
        f=open(i,'r')
        k=ext
    
    if k[-1]=="a":
        fmt="fasta"
        #print("fasta")
    if k[-1]=="q":
        fmt="fastq"
        #print("fastq")
    c=0
    shannon_total=0
    for x in SeqIO.parse(f,fmt):
        c=c+1
        if c<=samples:
            shannon = estimate_shannon_entropy(str(x.seq))
            shannon_total = shannon_total +shannon
        
    ans=float(shannon_total/samples)
    
    data[name1]=ans
    
folder=sys.argv[1] 
filelist=glob.glob(folder)
filelist.sort(key=tokenize)
#print(filelist)

samples=int(sys.argv[2])
threads=int(sys.argv[3])

global data
data={}

executor = concurrent.futures.ProcessPoolExecutor(threads)
futures = [executor.submit(shan, i) for i in filelist]
concurrent.futures.wait(futures)

print(data)

【问题讨论】:

    标签: python concurrent.futures


    【解决方案1】:

    好的,我找到了答案,如果有更好的方法(肯定有),我会离开这里。 二手经理:

    from multiprocessing import Manager
    manager=Manager()
    data=manager.dict()
    executor = concurrent.futures.ProcessPoolExecutor(threads)
    futures = [executor.submit(shan, i,data) for i in filelist]
    concurrent.futures.wait(futures)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多