我想通過打印出進程名稱,標識符和任何東西來弄清楚每個進程中發生了什麼。如何從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 ID。
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)'而不發送給每個worker。 – univerio