Я использую 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