У меня вопрос, основанный на ответе, который я видел. Он использует пул потоков для управления потоками, но каждый поток печатает 'Going to sleep... i'
, спит для i
и затем печатает 'Slept..'
. мой вопрос, почему он печатает 'Going to sleep...Going to sleep...Going to sleep...'
? Он не печатает их на новой строке, если я явно не добавлю \n
в конец строки. Вот мой вывод без \n
. `Печать пропусков новой строки
Going to sleep...Going to sleep...Going to sleep...
Slept ..0
Going to sleep...
Slept ..1
Going to sleep...
Slept ..2
Slept ..3
Slept ..4
done!!`
Вот мой выход с новой строки
Going to sleep...
Going to sleep...
Going to sleep...
Slept ..0
Going to sleep...
Slept ..1
Going to sleep...
Slept ..2
Slept ..3
Slept ..4
done!!
Промежутки между Going to sleep...
и первым Slept..
показаться странным для меня, как хорошо.
Вот код
import time
from multiprocessing.dummy import Pool
def run(i):
print "Going to sleep...\n"
time.sleep(i)
print ("Slept .." + str(i))
p = Pool(3)
res = [p.apply_async(run, (i,)) for i in range(5)]
p.close()
p.join()
print "done!!"
так разумно думать, что вы должны использовать 'sys.stdout.write' и явно писать все' \ n' вместо использования печати, чтобы избежать этой проблемы? – SirParselot
@SirParselot: вы действительно можете написать прямо в 'sys.stdout'. Учитывайте, что условия гонки могут все еще иметь место между различными вызовами 'write()'. –
У вас были бы условия гонки между вызовами 'print()', хотя, верно? – SirParselot