Я пытаюсь выяснить, что происходит в каждом процессе, распечатав имя процесса, идентификатор, что угодно.Как распечатать имя процесса процесса из многопроцессорного пула python
Ниже некоторые тестовый код (код заслуга этого SO question :)
def f(x):
print multiprocessing.current_process().name
return x * x
def b():
p = multiprocessing.Pool()
print p.map(f, range(6))
def main():
b()
Выхода он производит:
PoolWorker-6
PoolWorker-10
PoolWorker-10
PoolWorker-11
PoolWorker-14
PoolWorker-15
[0, 1, 4, 9, 16, 25]
Что я и думаю, что я хочу/нужно, чтобы помочь мне отладки что случилось с моей программой. Однако мой код немного отличается (прежний код мне нужно исправить от кого-то другого). Код, который у меня ниже, не печатает хороший идентификатор PoolWorker.
def f(x):
print multiprocessing.current_process().name
return x * x
def b():
p = multiprocessing.Pool()
for i in range(10):
p.apply_async(f(i))
def main():
b()
Когда я запускаю этот код, он печатает:
MainProcess
MainProcess
MainProcess
MainProcess
MainProcess
MainProcess
Так что мой код использует Pool.apply_sync() вместо Pool.map(). Как распечатать уникальный идентификатор/имя для каждого процесса, чтобы я мог понять, что происходит? Заранее спасибо за вашу помощь.
Это потому, что вы вызываете 'f (i)' в родительском процессе, не отправляя его каждому работнику. – univerio