簡體   English   中英

Python,多處理庫問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM