[英]Python, issue with multiprocessing library
我有一個程序,我想在其中為多個參數並行運行其中一個函數。
該程序采用以下格式:
import statements
def function1():
do something
def function2()
do something
def main():
function1()
我在網上找到了幾個如何使用multiprocessing
庫的示例,例如以下通用模板
import multiprocessing
def worker(num):
print 'Worker:', num
return
if __name__ == '__main__':
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
p.start()
據我了解, worker()
是旨在並行執行的功能。 但我不確定在哪里或如何使用 ( if __name__ == '__main__':
塊代碼。
到目前為止,該塊在我的main()
,當我運行程序時,我沒有多次執行輔助函數,而是多次執行 main 函數?
那么放置 ( if __name__ == '__main__':
塊的正確位置在哪里
將您提供的兩個示例混合在一起,它看起來像這樣:
import multiprocessing
def worker(num):
print 'Worker:', num
return
def main():
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
p.start()
p.join()
if __name__ == '__main__':
main()
用function1
替換worker
,即您想要並行化的任何一個。
關鍵部分是在if __name__ == '__main__':
塊中調用該main
函數,但是在這個簡單的示例中,您可以輕松地將代碼放在def main():
下if __name__ == '__main__':
直接。
如果你永遠不會從這個文件中導入任何東西,你甚至不需要if __name__ == '__main__':
part; 僅當您希望能夠將此腳本中的函數導入其他腳本/交互式會話而不運行main()
的代碼時,才需main()
。 請參閱if __name__ == "__main__": do? .
所以最簡單的用法是:
import multiprocessing
def worker(num):
print 'Worker:', num
return
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
p.start()
p.join()
編輯:多處理池示例
import multiprocessing
def worker(num):
#print 'Worker:', num
return num
pool = multiprocessing.Pool(multiprocessing.cpu_count())
result = pool.imap(worker, range(5))
print list(result)
印刷:
[0, 1, 2, 3, 4]
另請參閱Python multiprocessing.Pool:何時使用 apply、apply_async 或 map? 以獲得更詳細的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.