日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python子进程修改父进程内变量_如何将父变量传递给python中的子进程?

發布時間:2024/7/5 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python子进程修改父进程内变量_如何将父变量传递给python中的子进程? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里的簡單答案是:不要使用subprocess.Popen,使用

multiprocessing.Process.或者,更好的是,multiprocessing.Pool或

concurrent.futures.ProcessPoolExecutor.

使用子進程,程序的Python解釋器根本不了解子進程;據它所知,子進程正在運行Doom.所以沒有辦法直接與它共享信息.*但是通過多處理,Python控件啟動子流程并設置所有內容,以便您可以盡可能方便地共享數據.

不幸的是,“盡可能方便”仍然不像在一個過程中那樣方便100%.但你能做的通常是足夠好的.閱讀Exchanging objects between processes部分和以下幾節;希望其中一個機制正是您所需要的.

但是,正如我在頂部隱含的那樣,在大多數情況下,您可以通過使用池來使其更簡單.不要考慮“運行6個進程并與它們共享數據”,而是將其視為“在6個進程池上運行一堆任務”.任務基本上只是一個函數 – 它接受參數,并返回一個值.如果您要并行化的工作適合該模型 – 聽起來就像您的工作一樣 – 生活就像生活一樣簡單.例如:

import multiprocessing

import os

import sys

import analysis

parent_dir = os.path.realpath(sys.argv[0])

paths = [os.path.join(folderpath, file)

for file in os.listdir(folderpath)]

with multiprocessing.Pool(processes=6) as pool:

results = pool.map(analysis.analyze, paths)

如果您使用的是Python 3.2或更早版本(包括2.7),則不能在with語句中使用Pool.我相信你想要這個:**

pool = multiprocessing.Pool(processes=6)

try:

results = pool.map(analysis.analyze, paths)

finally:

pool.close()

pool.join()

這將啟動6個進程,***然后告訴第一個進行分析.分析(路徑[0]),第二個做分析.分析(路徑[1])等.一旦任何進程完成后,游泳池將為其提供下一個工作路徑.當它們全部完成后,您將獲得所有結果的列表.****

當然,這意味著生活在analysis.py中的頂級代碼必須移動到函數def analyze(path)中:所以你可以調用它.或者,更好的是,如果您確實要保存該導入行,則可以將該函數移動到主腳本中,而不是單獨的文件中.

*你仍然可以間接地共享信息,例如,將它編組成一些交換格式,如JSON,并通過stdin / stdout管道,文件,共享內存段,套接字等傳遞它,但是多處理有效地包含了這些信息.你要讓它變得更容易.

**關閉池有不同的方法,你也可以選擇是否立即加入它,所以你真的應該在某些時候閱讀細節.但是當你所做的只是調用pool.map時,它確實沒關系;保證游泳池關閉并準備好在地圖呼叫返回時立即加入.

***我不確定你為什么要6;大多數機器有4個,8個或16個核心,而不是6個;為什么不全部使用它們?最好的做法通常是完全省略進程= 6并讓多處理器向你的操作系統詢問使用多少內核,這意味著它仍然可以在你的新機器上全速運行,內核數量是你的兩倍.明年會買.

****這有點過于簡單;通常,池會為第一個進程提供一批文件,而不是一次一個,以節省一些開銷,如果需要優化或更仔細地對它們進行優化,則可以手動控制批處理.但通常你不在乎,這種過度簡化是好的.

總結

以上是生活随笔為你收集整理的python子进程修改父进程内变量_如何将父变量传递给python中的子进程?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。