おはようございます、これは私の最初の質問です。ラズベリー・パイとタッチスクリーンを使用する私の高校で模擬選挙を行うためのシステムを作りました。インターフェイスはTKInterで処理され、結果はgspreadを使用してGoogleシートに追加されます。これにより、さまざまなチャートや分析でデータを処理することができます。複数の同じスプレッドシートへの接続(gspread)
私が実行している問題は、4台のマシンを使用していることです。一度に1つずつ取ると、データがきれいに追加されます。一度に複数のマシンを稼働させると、時々別のマシンを待つだけで、時には4つのうち1つしか記録されません。
異なるマシンから同時に複数の追加をプッシュする設定が良いかもしれませんか?現在、各マシンは他のマシンのミラーです。異なるマシンで異なる認証設定と異なるJSONファイルを作成した方が良いでしょうか?それとも私が行方不明の何か他のものがありますか?シートに書き込むためのリレーコードは以下の通りです。
#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
ありがとうございました!
同じシートにアクセスする複数のプロセスが、このようなブロックを引き起こしてはいけません。実際、私は誤ってスクリプトを終了することができなかった日常的な仕事をしていました。私はそれを発見する頃に、2〜2秒の更新間隔で互いに5〜6回の同じプロセスが戦っていました。つまり、_appending_行ではなく、直接セルを参照していました。単一行のアップロードは遅いです。私はあなたが行にいくつかの競合状態を取得する可能性があり、2番目のプロセスが拒否されるのだろうかと思います。各マシンには、独自のブロックのセルと、アップロードする場所を知る内部カウンタがありますか? – roganjosh