API의 데이터에 액세스해야하는 프로그램이 있습니다. 목록을 가져와 그 목록의 모든 항목에 대해 API에서 더 많은 데이터를 요청해야합니다. 목록을 받으면이 목록에 약 600 개의 항목이있을 때 50 개의 배치로 가져옵니다. 요청 및 스레딩을 사용하여이 작업을 수행 할 수 있다고 생각했습니다.내 파이썬 스레드가 요청을 통해 서로 넘어지고 있습니까?
call_api_method(method, token, params={}):
params_to_send = params.copy()
params_to_send['auth'] = token
response = requests.get('{0}/rest{1}'.format(DOMAIN, method), params = params_to_send)
return response.json()
내가 모든 정보를 얻을 수있는 재귀 스레딩 기능을 가지고 : 나는 기본적으로 API를 호출하는 도우미 메서드를
:처럼 여기 보이는 것입니다.
def import_item_info(auth_token, start = None):
if start is None:
start = 0
threads = []
result = call_api_method('get_list', auth_token, {'start': start})
#the call returns next which is the index of the next batch
if result['next']:
thread = threading.Thread(target=import_item_info, args=(auth_token, result['next'])
thread.start()
threads.append(thread)
for list_item in result['result']:
thread = threading.Thread(target=get_item_info, args=(auth_token, item['ID'])
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
이 get_item_info이며, 항목의 ID를 사용하여 API를 호출합니다 : 나는 항목 별 정보를 요청하는 스레드를하면서 내가 가서 스레드를 사용하여 정보의 다음 배치를 요청할 수 있다고 생각 항목에 대한 특정 세부 사항 얻을 : 나는 많은 정보를 추상화 한
def get_item_info(auth_token, item_id):
item = call_api_method('get_item', auth_token, {'id': item_id})
print(item['key'])
을하지만, 본질적으로 무엇에가는 것은 때때로 requests.get이 약간 왜곡 뭔가 반환하고 나는 JSONDecodeError 수 : 기대 값 : 1 행 1 (char 0).
첫 번째 요청이 정상적으로 처리되기 때문에 이것이 스레딩 문제인 것으로 의심됩니다. 나는 내가 잘못하고있는 것을 발견 할 수 없다.
실제 URL은 무엇입니까? 쓰레드없이'get_item_info'를 시도 했습니까? 같은 문제가 생겼어? 당신이 얻은 것을보기 위해'response.text' 또는'response.content'를 출력 했습니까? 어쩌면 당신은 유용한 정보를 얻을 것입니다 - 아마 API가 당신에게 경고를 보내거나 네트워크에 다른 문제가 있습니다. 웹 브라우저에서 직접 테스트 할 수있는 전체 URL을 인쇄 했습니까? 어쩌면 당신도 웹 브라우저에서 작동하지 않는 URL을 만들 수 있습니다. – furas
get_item_info는 스레드없이 완벽하게 작동합니다. 문제 없습니다. 나는 그 물품과 그 열쇠를 잘 인쇄했다. 전체 URL도 잘 작동합니다. 실제 URL은 무엇입니까? 그것은 회사의 클라우드 CRM입니다. –