我正在尝试建立一个 FastAPI 服务器,它将接受一些生物数据作为输入,并对它们进行一些处理。由于处理会占用服务器的所有资源,因此应按顺序处理查询。但是,服务器应该保持响应并在缓冲区中添加更多请求。我一直在尝试使用 BackgroundTasks 模块来实现此目的,但是在发送第二个查询后,任务运行时响应会延迟。感谢任何帮助,并提前致谢。
import os
import sys
import time
from dataclasses import dataclass
from fastapi import FastAPI, Request, BackgroundTasks
EXPERIMENTS_BASE_DIR = "/experiments/"
QUERY_BUFFER = {}
app = FastAPI()
@dataclass
class Query():
query_name: str
query_sequence: str
experiment_id: str = None
status: str = "pending"
def __post_init__(self):
self.experiment_id = str(time.time())
self.experiment_dir = os.path.join(EXPERIMENTS_BASE_DIR, self.experiment_id)
os.makedirs(self.experiment_dir, exist_ok=False)
def run(self):
self.status = "running"
# perform some long task using the query sequence and get a return code #
self.status = "finished"
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析输入文件(我的测试文件为4行),然后查询在线生物数据库。但是,返回第一个结果后,我的循环似乎停止了。
#!/bin/bash
if [ "$1" = "" ]; then
echo "No input file to parse given. Give me a BLAST output file"
else
file=$1
#Extracts GI from each result and stores it on temp file.
rm -rf /home/chris/TEMP/tempfile.txt
awk -F '|' '{printf("%s\n",$2);}' "$file" >> /home/chris/TEMP/tempfile.txt
#gets the species from each gi.
input="/home/chris/TEMP/tempfile.txt"
while read -r i
do
echo GI:"$i"
/home/chris/EntrezDirect/edirect/esearch -db protein -query "$i" | /home/chris/EntrezDirect/edirect/efetch -format gpc | /home/chris/EntrezDirect/edirect/xtract -insd source o
rganism | cut -f2
done < "$input" …Run Code Online (Sandbox Code Playgroud)