タグ

2017年5月16日のブックマーク (2件)

  • cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社

    MySQLのロック機能を使って楽に cronジョブの多重実行回避をしようという話 たかがロック、されどロック システムで非同期にキューの処理などを行う場合、cronを使って短い間隔でバッチジョブを起動してキューを処理するという方法がよく取られるが、キューの混み具合によってはバッチジョブにかかる時間が長くなってしまうため、前に実行されたジョブがまだ走っているかどうかチェックして、もし走っている場合は処理を実行せずにそのまま終了するといった制御が必要になる。 たまにこの制御をしていないバッチジョブが溜まりに溜まってシステムをハングさせているのを見かける。 適当な空のファイルを作成してこれを flockするとか、システムコールレベルでアトミックに作成できることになっているオブジェクト(シンボリックリンクなど)を駆使してロックの代わりにするとかといったテクニックが典型的に利用されるが、これらを真面

    cronジョブの多重起動を MySQLの汎用ロック機能で回避する - ブログ - ワルブリックス株式会社
    Marukosu
    Marukosu 2017/05/16
    [Python][MySQL][スレッド][ロック]
  • スレッドをロックする

    threadingモジュールの Lock, RLock, Condition, Semaphore オブジェクトを使う # -*- coding: utf-8 -*- import threading import time LOCK = threading.Lock() def func(): for i in range(10): time.sleep(0.1) print i, print def lock_func(): # with文を使わない場合はacquireとreleaseメソッドを使う with LOCK: func() a = threading.Thread(target=func) b = threading.Thread(target=func) print "unlock" a.start() b.start() a.join() b.join() c = th