Я считал Thread.ident
уникальным идентификатором потоков, но теперь вижу различные рабочие процессы в multiprocessing.poo.Pool
, сообщающий один и тот же идентификатор потока на threading.current_thread().ident
. Как?Идентификатор потока в многопроцессорных пул-операторах
ответ
В зависимости от платформы идентификаторы могут быть или не быть уникальными. Важно отметить, что библиотека многопроцессорности python фактически использует процессы вместо потоков для многопроцессорной обработки, и поэтому идентификаторы потоков между процессами на самом деле являются деталями реализации конкретной платформы.
В Unix/Linux: идентификатор потока гарантированно уникален внутри одного процесса. Однако идентификатор потока не гарантированно уникален для всех процессов. Однако processid (pid) будет уникальным для всех процессов. Таким образом, вы можете получить уникальный идентификатор, поставив их вместе. Деталь из man pthread
страницы http://man7.org/linux/man-pages/man7/pthreads.7.html
На окнах: поток идентификатор уникален по всей машине: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686746(v=vs.85).aspx
ли это документально подтверждено, что нить идентификаторы уникальны для каждого процесса? – Reith
@ 0x2c52 Мне пришлось немного поучаствовать в этом, и при этом я уточню свой ответ. Похоже, что потоки окон должны быть уникальными на всей машине, тогда как потоки linux будут уникальными в процессе. От человека pthreads: http://man7.org/linux/man-pages/man7/pthreads.7.html - «Идентификаторы потоков гарантированно будут уникальными только в рамках процесса. (В все функции pthreads, которые принимают поток ID в качестве аргумента, то Идентификатор по определению относится к потоку в том же процессе, что и вызывающий абонент .) «Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686746(v = vs.85) .aspx –