Я не знаю, почему вы используете мьютекс Window вместо Python. Используя методы Python, это довольно просто:
from threading import Thread, Lock
mutex = Lock()
def processData(data):
mutex.acquire()
try:
print('Do some stuff')
finally:
mutex.release()
while True:
t = Thread(target = processData, args = (some_data,))
t.start()
Но обратите внимание, что из-за архитектуры CPython (а именно, Global Interpreter Lock ) у вас все равно будет эффективно работать только один поток за раз - это нормально, если их число / O привязан, хотя вы захотите снять блокировку настолько, насколько это возможно, чтобы поток, связанный с вводом / выводом, не блокировал выполнение других потоков.
Альтернативой для Python 2.6 и новее является использование пакета multiprocessing
Python. Он отражает пакет threading
, но создаст совершенно новые процессы, которые могут выполняться одновременно. Обновление вашего примера тривиально:
from multiprocessing import Process, Lock
mutex = Lock()
def processData(data):
with mutex:
print('Do some stuff')
if __name__ == '__main__':
while True:
p = Process(target = processData, args = (some_data,))
p.start()