У меня есть многопоточная программа, которая печатает на консоли в сотнях мест. К сожалению, вместоMake puts thread-safe
Line 2
Line 1
Line 3
Я получаю
Line2Line1
Line3
Я пытаюсь сделать puts
поточно.
В Python (который я не думаю, что есть такая проблема, но предполагаю, что это сделал), я бы
old_print = print
print_mutex = threading.Lock()
def print(*args, **kwargs):
print_mutex.acquire()
try:
old_print(*args, **kwargs)
finally:
print_mutex.release()
Я пытаюсь это в Рубине,
old_puts = puts
puts_mutex = Mutex.new
def puts(*args)
puts_mutex.synchronize {
old_puts(*args)
}
Но это не работает: "неопределенный метод old_puts
"
Как сделать потокобезопасным (т. не печатать отдельные строки)?
Совет: когда вы делаете 'old_puts = puts', вы неявно выполняете' old_puts = puts() ' –