小编Raf*_*ios的帖子

如何从python中的线程池中获取结果?

我在这里搜索了如何在python中进行线程化,但到目前为止我还没有得到我需要的答案.我对Queue和Threading python类不太熟悉,因此这里出现的一些anwsers对我来说毫无意义.

我想创建一个线程池,我可以给出不同的任务,当它们全部结束时获取结果值并处理它们.到目前为止,我试图这样做,但我无法得到结果.我写的代码是:

from threading import Thread
from Queue import Queue

class Worker(Thread):
    """Thread executing tasks from a given tasks queue"""
    def __init__(self, tasks):
        Thread.__init__(self)
        self.tasks = tasks
        self.daemon = True
        self.result = None
        self.start()
    def run(self):
        while True:
            func, args, kargs = self.tasks.get()
            try:
                self.result = func(*args, **kargs)
            except Exception, e:
                print e
            self.tasks.task_done()
    def get_result(self):
        return self.result

class ThreadPool:
    """Pool of threads consuming tasks from a queue"""
    def __init__(self, num_threads):
        self.tasks = Queue(num_threads)
        self.results = []
        for _ …
Run Code Online (Sandbox Code Playgroud)

python queue multithreading return-value

21
推荐指数
1
解决办法
2万
查看次数

如何使用变量值填充pandas数据框中的NaN值?

我有一个数据帧:

   Isolate1 Isolate2 Isolate3 Isolate4
2  NaN      NaN      AGTCTA   AGT
5  NaN      GC       NaN      NaN
Run Code Online (Sandbox Code Playgroud)

并且想要用破折号替换Isolate1列中的NaN值,对于来自其他列的非NaN值中的每个字母使用一个破折号(如果其他列具有其他不同的值,则为最大数字),以这样的结尾:

  Isolate1 Isolate2 Isolate3 Isolate4
2 ------   NaN      AGTCTA   AGT
5 --       GC       NaN      NaN
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

index_sizes_to_replace = {}
for row in df.itertuples():
    indel_sizes = []
    #0 pos is index
    for i, value in enumerate(row[1:]):
        if pd.notnull(value):
            indel_sizes.append((i, len(value)))
    max_size = max([size for i, size in indel_sizes])
    index_sizes_to_replace[row[0]]= max_size
Run Code Online (Sandbox Code Playgroud)

现在我有多少破折号来替换NaN值,但不知道如何填充,试过这个:

for index, size in index_sizes_to_replace.iteritems():
    df.iloc[index].fillna("-"*size, inplace=True)
Run Code Online (Sandbox Code Playgroud)

但没有工作,任何建议?

python dataframe pandas

3
推荐指数
2
解决办法
722
查看次数

如何从python中管道许多bash命令?

嗨,我试图从python调用以下命令:

comm -3 <(awk '{print $1}' File1.txt | sort | uniq) <(awk '{print $1}' File2.txt | sort | uniq) | grep -v "#" | sed "s/\t//g"
Run Code Online (Sandbox Code Playgroud)

当通信命令的输入也被管道传输时,我怎么能进行调用?

有一种简单直接的方法吗?

我尝试了子进程模块:

subprocess.call("comm -3 <(awk '{print $1}' File1.txt | sort | uniq) <(awk '{print $1}' File2.txt | sort | uniq) | grep -v '#' | sed 's/\t//g'")
Run Code Online (Sandbox Code Playgroud)

没有成功,它说:OSError:[Errno 2]没有这样的文件或目录

或者我必须单独创建不同的调用,然后使用PIPE传递它们,如子进程文档中所述:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = …
Run Code Online (Sandbox Code Playgroud)

python bash subprocess pipe

1
推荐指数
1
解决办法
780
查看次数