Запрос биопиона Entrez в многопроцессорном сбое - PullRequest
0 голосов
/ 21 октября 2019

Я использую biopython, особенно Entrez, чтобы запросить результаты поиска и сводные результаты. Я хочу добиться распараллеливания с помощью многопроцессорной обработки, чтобы повысить эффективность, но получается, что Entrez по какой-то причине запретил мне это делать.

Я пробовал оба пакета multiprocessing Python и модуль pathos.multiprocessing. И то и другое не работает, хотя выдает разные сообщения об ошибках. Вот мой код использования pathos.multiprocessing. Я использовал try в get_entrez_esearch_response(), чтобы проверить, не является ли запрос 1011 * нечитаемым . Оказывается, после возврата некоторых uid, get_entrez_esearch_response() будут возникать исключения и продолжать печатать тот же набор запросов в цикле while. Я понимаю, что сервер NCBI ограничил количество запросов в секунду, но почему бы не начать запрос со следующей секунды?

from Bio import Entrez
from pathos.multiprocessing import ProcessingPool

def get_entrez_esearch_response(query):
    while True:
        try:
            handle = Entrez.esearch(db=“gds”, term=query)
            uid = Entrez.read(handle)["IdList"][0]
            handle.close()
            return uid
        except Exception as e:
            print(e)
            print(query)

def get_entrez_esearch_response_parallel(queries):
    with ProcessingPool(2) as p:
        uid_list = p.map(get_entrez_esearch_response, queries)
        print(uid_list)
#uid1
#uid2
#uid3
#uid4
(GSE99020) AND "gse"[Entry Type]
HTTP Error 429: Too Many Requests
(GSE92593) AND "gse"[Entry Type]
HTTP Error 429: Too Many Requests
(GSE25220) AND "gse"[Entry Type]
HTTP Error 429: Too Many Requests
(GSE92593) AND "gse"[Entry Type]
HTTP Error 429: Too Many Requests
...