안녕하세요, 제 첫 번째 질문입니다. 나와 함께하시기 바랍니다! 고등 학교에서 나무 딸기 파이와 터치 스크린을 사용하는 모의 선거를위한 시스템을 만들었습니다. 인터페이스는 TKInter를 통해 처리되며 그 결과는 gspread를 사용하여 Google 시트에 추가됩니다. 그러면 다양한 차트와 분석으로 데이터를 처리 할 수 있습니다.동일한 스프레드 시트에 여러 개의 연결 (gspread)
제가 겪고있는 문제는 4 대의 기계를 사용하고 있다는 것입니다. 한 번에 하나씩 가져 가면 데이터를 잘 덧붙입니다. 한 번에 여러 대의 기계를 사용하는 경우 가끔씩 다른 기계를 기다리는 경우가 있으며 때로는 4 개 중 1 개만 기록됩니다.
다른 컴퓨터에서 여러 개의 추가를 동시에 푸시하도록 설정하는 것이 더 좋습니까? 현재 각 기계는 다른 기계의 거울입니다. 각기 다른 인증 설정과 각기 다른 JSON 파일을 작성하면 더 효과가 있습니까? 아니면 제가 놓친 다른 것이 있습니까? 시트에 쓰는 데 필요한 relatent 코드는 다음과 같습니다.
#while True:
# Login if necessary.
if worksheet is None:
worksheet = login_open_sheet(GDOCS_OAUTH_JSON, GDOCS_SPREADSHEET_NAME)
# Append the data in the spreadsheet, including a timestamp
try:
worksheet.append_row((datetime.datetime.now(), gender, grade, party, vote))
except:
# Error appending data, most likely because credentials are stale.
# Null out the worksheet so a login is performed at the top of the loop.
print('Append error, logging in again')
worksheet = None
감사합니다.
동일한 시트에 액세스하는 여러 프로세스가 이와 같이 차단을해서는 안됩니다. 실제로, 나는 실수로 종료하지 못한 스크립트에서 매일 cron 작업을 수행했으며, 발견 할 때까지는 2 ~ 2 초 간격으로 서로 5 ~ 6 개의 동일한 프로세스가 서로 싸우고있었습니다. 즉, _appending_ 행이 아닌 직접 셀을 참조했습니다. 단일 행의 업로드가 느립니다. 난 당신이 행에 몇 가지 경쟁 조건을 얻을 가능성이 있는지 궁금해하고 두 번째 프로세스가 거부됩니다. 각 기계가 자체 블록을 가질 수 있고 업로드 할 위치를 알 수있는 내부 카운터가있을 수 있습니까? – roganjosh