小编Scu*_*ris的帖子

FastAPI,将长任务添加到缓冲区并一一处理,同时保持服务器响应能力

我正在尝试建立一个 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)

python asynchronous fastapi

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

Bash脚本循环仅运行一次

我正在尝试解析输入文件(我的测试文件为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)

bash loops bioinformatics

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

标签 统计

asynchronous ×1

bash ×1

bioinformatics ×1

fastapi ×1

loops ×1

python ×1