2013-05-29 2 views
3

У меня есть таблица InnoDB, которая содержит список файлов, которые необходимо обработать.Как я могу обеспечить безопасность ниндзя-потока

Сценарий питона, который обрабатывает обработка в основном делает это:

  1. получить следующий файл, который имеет статус = «необработанным»
  2. установить статус на «обработку»
  3. вызова некоторые C++ сценарий для процесса что файл
  4. пометить его как «обработаны»
  5. конец

Этот скрипт python будет вызываться несколько раз, и поэтому я несколько обеспокоен тем, что на шагах 1 и 2 может возникнуть некоторая проблема, когда процесс B будет получать одну и ту же строку из db как процесс A, прежде чем процесс A будет иметь время обновите статус на шаге 2.

Я предполагаю, что Python GIL не помогает мне здесь, так как интерпретатор выпустит GIL при выполнении SQL (правильно?). И из того, что я читаю, делать блокировки таблиц на InnoDB не работает. Будет ли блокировка на уровне строк позаботиться о проблеме здесь? Если нет, то каковы мои другие варианты?

Могу ли я просто сделать "из потоковая импорта Замка" и добавить

with lock: 
    update_file_status(file_id, "processing") 

?

ответ

3

заявление SELECT FOR UPDATE - это будет иметь исключительную блокировку в строке и не позволит другим SELECT FOR UPDATE в той же строке.

+0

спасибо, я попробую это решение! – badideas

Смежные вопросы