我在这里搜索了如何在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) 我有一个数据帧:
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调用以下命令:
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)